http://blog.sina.com.cn/doforu[订阅][手机订阅]
个人资料
访客
读取中...
好友
读取中...
评论
读取中...
分类
    内容读取中…
博文
C#实现控件数组(2009-08-13 09:10)
 

       DotNet里取消了控件数组,这让习惯了使用VB控件的程序员非常不适应。有什么办法能够实现控件数组的功能吗?答案是肯定的。

       众所周知,控件数组最主要的两个优点:可以循环附值;可以响应同一个事件。从而大大简化了代码。下面根据这两个方面,举一个例子。

       新建一个工程,在窗体上添加5个textbox(textBox1...textBox5)和2个button (button1、button2)。

       1.循环附值

          总的来说,有两种实现方法:

          1.1 定义动态的控件数组。因为DotNet里支持动态的控件数组,所以我们可以把已设计好的控件,附给动态的数组,这样就可以任意的使用了。代码如下:

 &nb

使用托管C++(2009-08-05 20:45)
  转向.NET后,手头上往往仍有旧的模块要重用。也许这些模块是Delphi写的,也许是C/C++写的,或者是其它编程语言……为了能把它们移植到.NET下,或者是在.NET中调用,To be or not to be, that is a question。
  在这里,我笔记了几个在工作中遇到的几个场景。不过,这里不包括完全使用C#来重写原来用C++编写的程序这种变态的需求。当你被要求做这种事的时候,请三思而后行……这简直是种非人的折磨。

您也使用托管C++吗?  如沐枫林

  场景一:在.NET中调用WindowsAPI或DLL。

  这是比较普遍的需求。一般来说,简单的函数调用,大可直接用C#/VB.NET,经过DllImport属性包装出函数来调用。如:

[DllImport('KERNEL32.DLL', EntryPoint='MoveFileW',   SetLastError=true,
CharSet=CharSet.Unicode, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
public static extern bool MoveFile(String src, String dst);

  由于WindowsAPI用到的人实在是多,因此有一个专门的wiki站点,收集这方面的资料:http://www

1.句柄是什么?
    在windows中,句柄是和对象一一对应的32位无符号整数值。对象可以映射到唯
一的句柄,句柄也可以映射到唯一的对象。
2.为什么我们需要句柄?
    更准确地说,是windows需要句柄。windows需要向程序员提供必要地编程接口
,在这些接口中,允许程序员访问、创建和销毁对象。但是,出于封装地考虑,wi
ndows并不想向程序员返回指针。指针包含了太多的信息。首先指针给出了对象存储
的确切位置;其次,要操作一个指针,程序员必须知道指针所指对象的内部结构特
征,也即,windows必须向程序员暴露相应的数据结构,而这些数据结构也许是操作
系统想向程序员隐藏的。
    如果说COM技术向用户隐藏了数据,只暴露了接口并只允许按接口定义的方法操
作数据的话,句柄这种方式则允许你按自己的方式直接操作数据,但windows又不向
你直接暴露数据。直接操作数据是程序员需要的,不暴露数据是windows所需要的,
句柄封装方式实现了各取所需。
3.句柄如何与对象映射?
    封装背后
Excel操作类C#版(2009-08-01 20:43)

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 Microsoft.Office.Interop;
using Microsoft.Office.Core;


namespace ExcelEdit
{
/// <SUMMARY>
/// ExcelEdit 的摘要说明
/// </SUMMARY>
    public class ExcelEdit
    {
        public string mFilename;
        public Excel.Application app;
        public Excel.Workbooks wbs;
        public Excel.Workbook wb;
        public Excel.Worksheets wss;
        public

有许多人问的,.Net中的委托以及事件处理。我拿简单的例子说明一下,是现实中的例子:

比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。
你命令小王,如果小张玩游戏,则小王扣去小张500元钱。

这就是现实中的委托。

实际上,在写程序中,程序员就是老板,小张和小王就是两个对象。小张玩游戏是一个方法,小张还有一个游戏事件,他玩游戏激发这个事件。而小王就是事件处理对象,他负责把小张的钱扣除500。

所以,委托有如下几个要素:
1 激发事件的对象--就是小张
2 处理对象事件的对象--就是小王
3 定义委托,就是你让小王监视小张。

如果这三个要素都满足的话,则你就写出了一个完整事件的处理。

下面有个例子:在vs.net2003 C#控制台应用程序编辑运行成功:
using System;

namespace CSharpConsole
{
 public class 场景
 {
  [STAThread]
  public static void Main(string[] args)
  {
   Console.WriteLine('场景开始了....');
   //

 在使用 VC、 VB、 Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置 ODBC数据源。对于一般用户而言,配置 ODBC数据源可能是一件比较困难的工作。而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷。为能在程序中完成这一工作,方便应用程序的使用,本文以 VC为开发环境介绍两种在应用程序中动态加载 ODBC系统数据源的方法。 

  方法一:修改注册表 

  设计思路 

  一般情况下,当用户在控制面板中配置好 ODBC数据源后, Windows系统便在注册表中加入了一些子键来存储用户的配置结果。当应用程序需要用到数据源时, Windows便会通知底层接口查阅注册表中该数据源的配置。如果用户删除了某个 ODBC数据源,那么也会在注册表中有所反应。如果配置的数据源是用户数据源, Windows系统便会修改注册表的 HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI子键;如果配置的数据源是系统数据源, Windows系统便会修改注册表的 HKEY_L

并行接口的分类: SPP(标准并行接口) ,EPP(增强型并行接口),ECP(扩展型并行端口)

  标准并行端口(SPP)也是最早的端口定义,主要功能如下,1:并行端口提供了8个数据线以进行并行的字节传输,2:计算机能够通过数据线向打印机发送选能信号,以通知打印机已经准备好接收数据,3:打印机招收到数据后,向计算机发送一个回应信号(NACK)。其各位信号线所代表的意义详见下表。

  增强型并行端口(EPP)的出现提供了一种更高性能的连接方式,并东路向下兼容所有在此之前存在的并行接口及外设。与SPP不同之处在于原来17个信号中的重新定义,在这17个信号中,EPP使用了其中的14个信号进行传输,握手和选通,剩下的3个信号可以由外设设计者有来自定义。

  并行接口的大致结构:
     
并行口一般有25个引脚,其中包括8位数据线,5位打印机状态线,4位控制线.下面将对这些引脚予以详细说明:
  (注:1:>出,表示由计算机发向打印机;入,表示由打印机发向计算机,
      2:>低电

Q UNICODE字符串如何显示
A
如果程序定义了_UNICODE宏直接用
WCHAR *str=L'unicodestring';
TextOut(0,0,str);
否则就需要转换类型
#include <comdef.h>
WCHAR *str=L'unicodestring';
bstr_t str1=str;
TextOut(0,0,(char*)str1);

Q 如何实现ANSI和UNICODE的相互转换
A
将ANSI转换到Unicode
(1)通过L这个宏来实现,例如: CLSIDFromProgID( L'MAPI.Folder',&clsid);
(2)通过MultiByteToWideChar函数实现转换,例如:
char *szProgID = 'MAPI.Folder';
WCHAR szWideProgID[128];
CLSID clsid;
long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof (szWideProgID));
szWideProgID[lLen] = '\0';
(3)通过A2W宏来实现,例如:
USES_CONVERSION;
CLSIDFromProgID( A2W(szProgID),&clsid);

成为“肉鸡”后的症状:
1.当你正在浏览网页时,弹出广告是很正常的,但你没有打开浏览器时,它却自己跳出来了;
2.你在使用电脑时,弹出了警告窗口,而你却没有进行过任何危险操作;
3.某个进程长时间占用系统资源过多,而它又不是B T等下载类软件;
4.没有进行任何操作,硬盘频繁读取。要知道现在的电脑配置都很高了,除了玩游戏或运行大型软件外,很少有需要经常读写的操作。
5.经常出现某个正在使用的程序无响应,或频繁死机、重启;
6.鼠标或键盘会不听使唤;
7.软件(如浏览器)的设置被强行修改;
电脑出现异常时,一定要注意,查看一下是什么原因,是由于你安装的软件?还是电脑硬件出问题了呢?如果都不是,一定要马上解决问题,将损失降至最低点。
出现上面的问题,要立刻断网,以防入侵者窃取你的重要文件。还要注意,若某个月电话费中的信息费过高,则要立刻修改ADSL密码,入侵者很可能用它在网上消费。

教你一招怎么找到黑客留下的踪影
当电脑出现异常时,可以确定是否有别人进入到你的系统,这个方法的主角就是“系统日志”。
可以通过“控制面板→管理工具”下的“事件查看器”

 
进程的重要性体现在可以通过观察它,来判断系统中到底运行了哪些程序,以及判断系统中是否入驻了非法程序。正确地分析进程能够帮助我们在杀毒软件不起作用时,手动除掉病毒或木马。

  瞭望进程

  如何知道系统中目前有哪些进程?在Windows98/Me/2000/XP/2003中,按下“Ctrl+Alt+Delete”组合键就可以直接查看进程,或打开“Windows 任务管理器”的“进程”选项来查看进程。通常来说,系统常见的进程有winlogon.exe,services.exe,explorer.exe,svchost.exe等。要熟悉进程,首先就要熟悉最常见的系统进程,这样当发现其它奇怪的进程名(如HELLO,GETPASSWORD,WINDOWSSERVICE等等)时就方便判断了。

  常规杀灭进程法

  1.有的进程在进程选项中无法删除,这时可以打开注册表编辑器(在“开始→运行”中键入regedit),找到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”下面的键,将可疑的选项删除。

  2.另外,还可以通过系统的“管理工具”里面的“服务”查看目前的全部进程。这里重