博文

学习ASP.NET的体会(2005-08-02 18:55:00)

摘要:
在ASP.NET中,整张Web页是放在一张大表单里面的。如:

<HTML>

<HEAD><TITLE>********</TITLE>

</HEAD>

<BODY>

<FORM NAME=”FORM1” ACTION=”*****”>

网页的具体内容……

</FORM>

</BODY>

</HTML>

       在这个表单内可能放置了很多html控件如按钮、下拉菜单、文本框等。ASP.NET提供了一些服务器端Web控件。在服务器上执行的时候,通过一定的条件,Web窗体将这些服务器Web控件转换为普通的html控件。比如一个按钮:

       <asp:Button id="B_submit" runat="server" Width="37" Height="22" Text="确定" BackColor="DodgerBlue" BorderColor="Lavender" ForeColor="White"></asp:Button>

       经过转换后就变成了:

<input type="submit" name="B_submit" value="确定" id="B_submit" style="color:White;background-color:DodgerBlue;border-color:Lav......

阅读全文(3691) | 评论:0

ref和out(MSDN)--补充(2005-05-20 09:31:00)

摘要:    我们发现,ref和out似乎可以实现相同的功能.因为都可以改变传递到方法中的变量的值.但是,二者本质本质的区别就是,ref是传入值,out是传出值.在含有out关键字的方法中,变量必须由方法参数中不含out(可以是ref)的变量赋值或者由全局(即方法可以使用的该方法外部变量)变量赋值,out的宗旨是保证每一个传出变量都必须被赋值.
    所以ref侧重修改.out侧重输出.
......

阅读全文(2877) | 评论:0

 C# 程序员参考-----使用 ref 和 out 传递数组(2005-05-20 09:28:00)

摘要: 

使用 ref 和 out 传递数组请参见
数组
与所有的 out 参数一样,在使用数组类型的 out 参数前必须先为其赋值,即必须由接受方为其赋值。例如:

public static void MyMethod(out int[] arr)
{
   arr = new int[10];   // definite assignment of arr
}
与所有的 ref 参数一样,数组类型的 ref 参数必须由调用方明确赋值。因此不需要由接受方明确赋值。可以将数组类型的 ref 参数更改为调用的结果。例如,可以为数组赋以 null 值,或将其初始化为另一个数组。例如:

public static void MyMethod(ref int[] arr)
{
   arr = new int[10];   // arr initialized to a different array
}
下面的两个示例说明 out 和 ref 在将数组传递给方法上的用法差异。

示例 1
在此例中,在调用方(Main 方法)中声明数组 myArray,并在 FillArray 方法中初始化此数组。然后将数组元素返回调用方并显示。

// cs_array_ref_and_out.cs
using System;
class TestOut
{
   static public void FillArray(out int[] myArray)
   {
      // Initialize the array:
      myArray = new int[5] {1, 2, 3, 4, 5};
  &nb......

阅读全文(3275) | 评论:0

ref和out(MSDN)(2005-05-20 09:25:00)

摘要:  先总的来说:
通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响.此外我们还有其他向方法传递参数的形式,引用(ref)和输出(out).
    有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值.引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值.变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置.当引用被修改时,修改的是内存中的值,因此变量的值可以将被修改.当我们调用一个含有引用参数的方法时,方法中的参数将指向被传递给方法的相应变量,因此,我们会明白,为什么当修改参数变量的修改也将导致原来变量的值.
在次首先先说ref:(MSDN)
C# 程序员参考   

ref请参见
C# 关键字 | 方法参数
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。

传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。

属性不是变量,不能作为 ref 参数传递。

如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。例如,以下重载声明是有效的:

class MyClass
{
   public void MyMethod(int i) {i = 10;}
   public void MyMethod(ref int i) {i = 10;}
}
但以下重载声明是无效的:

class MyClass
{
&nbs......

阅读全文(6388) | 评论:0

基于C#的接口基础教程(2005-05-19 08:59:00)

摘要:  C#中不仅支持.Net 平台,而且支持COM平台。为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性。一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息。属性使 C# 能够支持特定的技术,如 COM 和 .Net,而不会干扰语言规范本身。C# 提供将COM接口转换为 C#接口的属性类。另一些属性类将 COM类转换为C# 类。执行这些转换不需要任何 IDL 或类工厂。

  现在部署的任何COM 组件都可以在接口转换中使用。通常情况下,所需的调整是完全自动进行的。

  特别是,可以使用运行时可调用包装 (RCW) 从 .NET 框架访问 COM 组件。此包装将 COM 组件提供的 COM 接口转换为与 .NET 框架兼容的接口。对于 OLE 自动化接口,RCW 可以从类型库中自动生成;对于非 OLE 自动化接口,开发人员可以编写自定义 RCW,手动将 COM 接口提供的类型映射为与 .NET 框架兼容的类型。

  使用ComImport引用COM组件
COM Interop 提供对现有 COM 组件的访问,而不需要修改原始组件。使用ComImport引用COM组件常包括下面 几个方面的问题:

  1、创建 COM 对象。

  2、确定 COM 接口是否由对象实现。

  3、调用 COM 接口上的方法。

  4、实现可由 COM 客户端调用的对象和接口。

  创建 COM 类包装

  要使 C# 代码引用COM 对象和接口,需要在 C# 中包含 COM 接口的定义。完成此操作的最简单方法是使用 TlbImp.exe(类型库导入程序),它是一个包括在 .NET 框架 SDK 中的命令行工具。TlbImp 将 COM 类型库转换为 .NET 框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。用 TlbImp 创建的 .NET 框架元数据可以通过 /R 编译器选项包括在 C# 内部版本中。如果使用 Visual Studio 开发环境,则只需添加对 COM 类型库的引用,将为您自动完成此转换。

  TlbImp 执行下列转换: ......

阅读全文(2614) | 评论:0

Windows API函数大全(2005-05-19 08:58:00)

摘要:1. API之网络函数
WNetAddConnection 创建同一个网络资源的永久性连接
WNetAddConnection2 创建同一个网络资源的连接
WNetAddConnection3 创建同一个网络资源的连接
WNetCancelConnection 结束一个网络连接
WNetCancelConnection2 结束一个网络连接
WNetCloseEnum 结束一次枚举操作
WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接
WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接
WNetEnumResource 枚举网络资源
WNetGetConnection 获取本地或已连接的一个资源的网络名称
WNetGetLastError 获取网络错误的扩展错误信息
WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称
WNetGetUser 获取一个网络资源用以连接的名字
WNetOpenEnum 启动对网络资源进行枚举的过程

2. API之消息函数
BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口
GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置
GetMessageTime 取得消息队列中上一条消息处理完毕时的时间
PostMessage 将一条消息投递到指定窗口的消息队列
PostThreadMessage 将一条消息投递给应用程序
RegisterWindowMessage 获取分配给一个字串标识符的消息编号
ReplyMessage 答复一个消息
SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口
SendMessageCallback 将一条消息发给窗口
SendMessageTimeout 向窗口发送一条消息
SendNotifyMessage 向窗口发送一条消息
......

阅读全文(9061) | 评论:0

Windows 窗体之创建动态上下文菜单(快捷菜单)(2005-05-13 17:00:00)

摘要: 若要节省创建应用程序所需的时间并减少代码量,可以让多个控件共享单个上下文菜单对象。利用一个只包含该控件必需菜单项的“动态”上下文菜单(或快捷方式菜单),可以减少应用程序中控件所需的上下文菜单总数。以下演练显示如何更改每个控件的菜单项。

  创建应用程序

  以下步骤将创建一个 Windows 应用程序,它具有包含两个控件的窗体。在运行时,如果右击每个控件(只要它具有焦点,即被选定),将显示相应的上下文菜单。RadioButton 控件的上下文菜单将包含两个项;CheckBox 控件的上下文菜单将包含三个项。

  在 Windows 窗体上创建动态上下文菜单

  1.创建新的 Windows 应用程序。

  2.将一个“复选框”(CheckBox) 控件和一个“RadioButton”控件从“工具箱”拖到窗体上。

  虽然任何两个(或更多个)控件都可以共享一个上下文菜单,但使具有类似命令的控件共享上下文菜单也是有好处的,因为这样可以减少必需动态显示及隐藏的量。

  3.双击“工具箱”中的“ContextMenu”组件,将其添加到窗体中。它将成为共享的上下文菜单。

  4.在“属性”窗口中,将 CheckBox 控件和 RadioButton 控件的 ContextMenu 属性设置为 ContextMenu1(在 C# 中为 contextMenu1)。

  5.在“属性”窗口中,将 CheckBox 控件的 ThreeState 属性设置为 true。

  6.从设计器中双击 ContextMenu 组件,为该组件的 Popup 事件创建默认的处理程序。在事件处理程序中插入执行以下任务的代码:

  ·添加两个菜单项,一个表示控件的 Checked 状态,另一个表示 Unchecked 状态。

  ·用 If 语句检验 CheckBox 控件是否为窗体上的 SourceControl。根据检验结果,动态地添加第三个菜单项,该菜单项表示控件的 Indeterminate 状态。

  以下示例显示如何使用 Add 方......

阅读全文(4920) | 评论:0

在Visual C#中运用API函数获取系统信息(2005-05-12 15:26:00)

摘要:API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法,或者是调用Windows API函数的接口,也就是说具备调用动态连接库的能力。Visual C#和其它开发工具一样也能够调用动态链接库的API函数。本文中笔者就结合实例向大家介绍在Visual C#中如何调用各种返回值的API,该实例就是一个通过API函数调用获取系统信息的程序。

  在Visual C#中调用API的基本过程:

  首先,在调用API之前,你必须先导入System.Runtime.InteropServices这个名称空间。该名称空间包含了在Visual C#中调用API的一些必要集合,具体的方法如下:

   using System.Runtime.InteropServices;

  在导入了名称空间后,我们要声明在程序中所要用到的API函数。我们的程序主要是获取系统的相关信息,所以用到的API函数都是返回系统信息的。先给出在Visual C#中声明API的方法:

[DllImport("kernel32")]
public static extern void GetWindowsDirectory(StringBuilder WinDir,int count);


  其中,"DllImport"属性用来从不可控代码中调用一个方法,它指定了DLL的位置,该DLL中包含调用的外部方法;"kernel32"设定了类库名;"public"指明函数的访问类型为公有的;"static"修饰符声明一个静态元素,而该元素属于类型本身而不是指定的对象;"extern"表示该方法将在工程外部执行,同时使用DllImport导入的方法必须使用"extern"修饰符;最后GetWindowsDirectory函数包含了两个参数,一个为StringBuilder类型的,另一个为int类型的,该方法返回的内容存在于StringBuil......

阅读全文(2922) | 评论:0

c# 调用windowsAPI注意!(2005-05-12 13:49:00)

摘要:   Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用WindowsAPI函数的接口, 也就是说具备调用动态连接库的能力。Visual C#和其它开发工具一样也能够调用动态链接库的API函数。.NET框架本身提供了这样一种服务,允许受管辖的代码调用动态链接库中实现的非受管辖函数,包括操作系统提供的Windows API函数。它能够定位和调用输出函数,根据需要,组织其各个参数(整型、字符串类型、数组、和结构等等)跨越互操作边界。
动态链接库函数使用前必须声明,相对于VB,C#函数声明显得更加罗嗦,前者通过 Api Viewer粘贴以后,可以直接使用,而后者则需要对参数作些额外的变化工作。
 动态链接库函数声明部分一般由下列两部分组成,一是函数名或索引号,二是动态链接库的文件名。
  譬如,你想调用User32.DLL中的MessageBox函数,我们必须指明函数的名字MessageBoxA或MessageBoxW,以及库名字User32.dll,我们知道Win32 API对每一个涉及字符串和字符的函数一般都存在两个版本,单字节字符的ANSI版本和双字节字符的UNICODE版本。

   需要提醒的是,每一种方法使用前必须在文件头加上:
  using System.Runtime.InteropServices;
 做为程序员,我们需要了解API从字面上了解便是编程接口,因此,做为开发者,需要了解的只是API的使用方法。

  API根据操作系统、处理器及功能性的不同而拥有很多不同的类型。   操作系统特用的API:

  每种操作系统都有许多通用的API以及一些特用的API,这些特用的API只能在当前操作系统中执行。

  例如:

  Windows NT 支持 MS-DOS, Win16, Win32, POSIX (Portable Operating System Interface), OS/2 console API; ......

阅读全文(3726) | 评论:0

把图片文件存到数据库时, 在通过WEB页查询时动态生成(2005-05-10 13:55:00)

摘要:需求是:
1.网站需要提供图片上传
2.图片不能用文件的方式保存, 只能保存到数据里.
3.查询页面里动态生成图像.

    一般都是用保存图片文件的方式, 在服务器上找个地方存下来, 然后数据库保存这个文件的WEB链接. 但是如果不允许用保存文件的方式, 而要求必须将图片数据直接存在数据库里呢?

    第一个问题是解决上传和保存的问题. 比如有一个网站提供DVD的资料, 用户可以自行加入新的DVD介绍文字和一个说明图片进去. 介绍和图片都放到数据库里, 文字资料不用说了, 主要是图片.
    以SQLSERVER为例:
    在SQLSERVER里建一个表来保存相关的信息,  如dvdimg,
CREATE TABLE [dbo].[DvdImg] (
     DVDID [int] NOT NULL ,
     Img [image] NULL ,
     filetype [char] (10)  NOT NULL
) ;
DVDid是关联到DVD主信息表的DVD唯一识别符, 为了让数据库快一点, 我把数据和图像分开了.
在上传页面上放一个文件上传控件,  就是下面这个东西:
protected System.Web.UI.HtmlControls.HtmlInputFile fEDImg;
名字就是: fEDImg
加一个保存按钮, 写个click事件的处理, 把数据insert到数据库里, 咱们主要说保存图片的这一段.
   
         if (thi......

阅读全文(4063) | 评论:0