当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪.Net通用大文件上传类      ......
    ▪重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresenter      [源码下载]重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresenter作者:webabcd介绍重新想象 Windows 8 Store Apps 之集合控件ComboBox - 下拉框ListBox - 列表框FlipView.........
    ▪.NET互操作性入门系列(二):使用平台调用调用Win32 函数      本专题概要:引言如何使用平台调用Win32 函数——从实例开始当调用Win32函数出错时怎么办?——获得Win32函数的错误信息小结 一、引言  上一专题对.NET 互操作性做了一个全.........

[1].Net通用大文件上传类
    来源:    发布时间: 2013-10-28
  using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.IO; namespace letwego.cn { /**//// <summary> /// .Net通用大文件上传类(可上传大文件,vs2005) /// </summary> public class UploadFile { //字段 private string _UploadInfo; // 文件上传的返回信息。 private int _UploadState; // 文件上传的返回状态 0 为成功。 private string _FileType; // 允许上传文件的类型。 private int _FileSize; // 上传文件的大小。 private int _MaxFileSize; // 上传文件大小的最大长度。 private string _NewFileName; // 上传后的文件名。 //初始 public UploadFile() { _UploadInfo = "NONE"; _UploadState = -1; _FileType = "*"; _MaxFileSize = 1024000;//1000k _NewFileName = ""; } #region 属性 /**//// <summary> /// 文件上传的返回信息 /// </summary> public string UploadInfo { set { _UploadInfo = value; } get { return _UploadInfo; } } /**//// <summary> /// 文件上传的返回状态 0 成功 1 没有选择文件或者0字节 2 文件太大 3 文件类型不允许 /// </summary> public int UploadState { set { _UploadState = value; } get { return _UploadState; } } /**//// <summary> /// 允许上传文件的类型,* 或默认代表可任意类型,例 "jpg|gif|bmp" /// </summary> public string FileType { set { _FileType = value; } get { return _FileType; } } /**//// <summary> /// 上传文件的大小 /// </summary> public int FileSize { get { return _FileSize / 1024; } } /**//// <summary> /// 上传文件大小的最大长度 /// </summary> public int MaxFileSize { set { _MaxFileSize = value * 1024; } get { return _MaxFileSize / 1024; } } /**//// <summary> /// 上传后的文件名 /// </summary> public string NewFileName { set { _NewFileName = value; } get { return _NewFileName; } } #endregion #region 上传主程序 /**//// <summary> /// 上传本地文件到服务器。 /// </summary> /// <param name="strSaveDir">在服务器端保存的物理路径。</param> /// <param name="HtmCtrlObjUploadFile">上传的文件对象 Input(File)。</param> /// <returns></returns> public void ExecUploadFile(string strSaveDir, HtmlInputFile HtmCtrlObjUploadFile) { int intFileExtPoint = HtmCtrlObjUploadFile.PostedFile.FileName.LastIndexOf("."); //存储最后一个 . 号的位置 string strFileExtName = HtmCtrlObjUploadFile.PostedFile.FileName.Substring(intFileExtPoint + 1).ToLower(); // 获取要上传的文件的后缀名。 _FileSize = HtmCtrlObjUploadFile.PostedFile.ContentLength;//文件大小 byte if (_FileSize == 0) // 判断是否有文件需要上传或所选文件是否为0字节。 { _UploadInfo = "没有选择要上传的文件或所选文件大小为0字节"; _UploadState = 1; return; // 返回文件上传状态和信息。 }
    
[2]重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresenter
    来源:    发布时间: 2013-10-28

[源码下载]


重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresenter



作者:webabcd


介绍
重新想象 Windows 8 Store Apps 之集合控件

  • ComboBox - 下拉框
  • ListBox - 列表框
  • FlipView - 滑动视图控件
  • ItemsControl ItemsPresenter - ItemsPresenter 用来呈现 ItemsControl 的 Items



示例
1、ComboBox 的 Demo
ComboBoxDemo.xaml

<Page
x:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="Transparent">
<StackPanel Margin="120 0 0 0">

<!--ComboBox - 下拉框-->

<!--xaml 方式为 ComboBox 添加数据-->
<ComboBox x:Name="comboBox" Width="200" Margin="5" HorizontalAlignment="Left">
<ComboBoxItem Content="ComboBoxItem1" />
<ComboBoxItem Content="ComboBoxItem2" />
<ComboBoxItem Content="ComboBoxItem3" />
</ComboBox>

<!--
后台绑定方式为 ComboBox 添加数据
DisplayMemberPath - 指定数据源中需要被显示出来的字段名称
MaxDropDownHeight - 用于指定打开后的下拉框的最大高度
-->
<ComboBox x:Name="comboBoxWithBinding" DisplayMemberPath="Name" MaxDropDownHeight="100" Width="200" Margin="5" HorizontalAlignment="Left" />

<!--通过模板设置 ComboBox 的每一项的布局和数据-->
<ComboBox ItemsSource="{Binding ItemsSource, ElementName=comboBoxWithBinding}" MaxDropDownHeight="100" Width="200" Margin="5" HorizontalAlignment="Left">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" Margin="5 0 0 0" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

</StackPanel>
</Grid>
</Page>

ComboBoxDemo.xaml.cs

/*
* ComboBox - 下拉框
* IsDropDownOpen - 下拉框是否处于打开状态
* MaxDropDownHeight - 打开后的下拉框的最大高度
* DropDownOpened - 下拉框打开时触发的事件
* DropDownClosed - 下拉框关闭时触发的事件
*/

using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using XamlDemo.Model;

namespace XamlDemo.Controls
{
public sealed partial class ComboBoxDemo : Page
{
public ComboBoxDemo()
{

    
[3].NET互操作性入门系列(二):使用平台调用调用Win32 函数
    来源:    发布时间: 2013-10-28

本专题概要:

  • 引言
  • 如何使用平台调用Win32 函数——从实例开始
  • 当调用Win32函数出错时怎么办?——获得Win32函数的错误信息
  • 小结

 

一、引言

  上一专题对.NET 互操作性做了一个全面的概括,其中讲到.NET平台下实现互操作性有三种技术——平台调用,C++ Interop和COM Interop,今天在这个专题中将会大家介绍第一种技术,即平台调用。然而朋友们应该会有这样的疑问,平台调用到底有什么用呢? 为什么我们要用平台调用的技术了?对于这两个问题的答案就是——平台调用可以帮助我们实现在.NET平台下(也就是指用C#、VB.net语言写的应用程序下)可以调用非托管函数(指定的是C/C++语言写的函数)。这样如果我们在.NET平台下实现的功能有现有的C/C++ 函数实现了这样的功能,这时候我们完全没必要自己再用托管语言(如C#、vb.net)去实现一个这样的功能,这时候我们应该想到 “拿来主义”,直接使用平台调用技术调用C/C++ 实现的函数。然而在实际应用中,使用平台调用技术来调用Win32 API较为普遍,所以在这个专题中将为大家具体介绍了如何使用平台调用来调用Win32函数以及调用过程中应该注意的问题,下面就从一个具体的实例开始本专题的介绍。

二、如何使用平台调用Win32 函数——从实例开始

在前一个专题中已经介绍了使用平台调用来调用非托管函数的步骤:

(1).  获得非托管函数的信息,即dll的名称,需要调用的非托管函数名等信息

(2). 在托管代码中对非托管函数进行声明,并且附加平台调用所需要属性

(3). 在托管代码中直接调用第二步中声明的托管函数

  然而调用Win32 API函数还有一些问题需要注意的地方, 首先, 因为很多Win32 API函数都有ANSI和Unicode两个版本,所以在托管代码声明时需要指定调用调用函数的版本。  然而很多Win32 API函数有ANSI和Unicode两个版本并不是随便说说的,而是有根据的。大家从调用步骤中可以看出,第一步就需要知道非托管函数声明,为了找到需要需要调用的非托管函数,可以借助两个工具——Visual Studio自带的dumpbin.exe和depends.exe,dumpbin.exe 是一个命令行工具,可以用于查看从非托管DLL中导出的函数等信息,可以通过打开Visual Studio 2010 Command Prompt(中文版为Visual Studio 命令提示(2010)),然后切换到DLL所在的目录,输入 dummbin.exe/exports dllName, 如 dummbin.exe/exports User32.dll 来查看User32.dll中的函数声明,关于更多命令的参数可以参看MSDN; 然而 depends.exe是一个可视化界面工具,大家可以从 “VS安装目录\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\Bin\”  这个路径找到,然后双击  depends.exe 就可以出来一个可视化界面(如果某些人安装的VS没有附带这个工具,也可以从官方网站下载:http://www.dependencywalker.com/),如下图:

  上图中 我用红色标示出 MessageBox 有两个版本,而MessageBoxA 代表的就是ANSI版本,而MessageBoxW 代笔的就是Unicode版本,这也是上面所说的依据。下面就看看 MessageBox的C++声明的(更多的函数的定义大家可以从MSDN中找到,这里提供MessageBox的定义在MSDN中的链接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx ):

int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);

现在已经知道了需要调用的Win32 API 函数的定义声明,下面就依据平台调用的步骤,在.NET 中实现对该非托管函数的调用,下面就看看.NET中的代码的:

using System;

// 使用平台调用技术进行互操作性之前,首先需要添加这个命名空间
using System.Runtime.InteropServices;

namespace 平台调用Demo
{
class Program
{
// 在托管代码中对非托管函数进行声明,并且附加平台调用所需要属性
// 在默认情况下,CharSet为CharSet.Ansi
// 指定调用哪个版本的方法有两种——通过DllImport属性的CharSet字段和通过EntryPoint字段指定
// 在托管函数中声明注意一定要加上 static 和extern 这两个关键字
[DllImport("user32.dll")]
public static extern int MessageBox1(IntPtr hWnd, String text, String caption, uint type);

// 在默认情况下,CharSet为CharSet.Ansi
[DllImport("user32.dll")]
public static extern int MessageBoxA(IntPtr hWnd, String text, String caption, uint type);

// 在默认情况下,CharSet为CharSet.Ansi
[DllImport("user32.dll")]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

// 第一种指定方式,通过CharSet字段指定
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox2(IntPtr hWnd, String text, String caption, uint type);

// 通过EntryPoint字段指定
[DllImport("user32.dll", EntryPoint="MessageBoxA")]
public static extern int MessageBox3(IntP
    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3