.NET流水账

一个真正的开明进步的国家,不是一群奴才造成的,是要有独立个性,有自由思考的人造成的。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  17 随笔 :: 0 文章 :: 30 评论 :: 6 引用

2007年9月26日 #

For Each MyItem As DataRowView In ComboBox1.Items
  MessageBox.Show(MyItem.Item("Name").ToString())
  If MyItem.Item("Name").ToString() = "A Name" Then
    ComboBox1.SelectedItem = MyItem
    ' Item found and selected, Exit the loop
    Exit For
  End If
Next
posted @ 2007-09-26 21:09 DalianGary 阅读(79) | 评论 (0)编辑

2007年8月2日 #

    我们知道当使用C++, COM和ATL来开发ActiveX的时候得CAB文件里面的INF文件描述了如何注册以及复制到何处的指令。
但是当我们用C#来开发ActiveX的时候,INF文件里面Registerserver=Yes 不起作用。因为这个命令只是调用regsvr32 来注册相应的组件,他对C#开发的ActiveX不起作用。

1、为了发布C#开发的ActiveX我们首先在2005里面建立一个.NET的MSI文件,如下图所示:



在Setup的Added output file的属性窗口里面,确认将Register property 设置成vsdrpCOM, 这个设置确保了在安装的时候会
调用regasm 来注册ActiveX控件。

2、CAB文件的建立

1[version]
2signature="$CHICAGO$"
3AdvancedINF=2.0
4[Setup Hooks]
5hook1=hook1
6
7[hook1]
8run=msiexec.exe /i "%EXTRACT_DIR%\ActiveXDotDownload.msi" /qn




     注意,浏览器出于安全性考虑,会拦截未经数字认证的控件。修改浏览器设置,在Internet选项-〉安全-〉受信任的站点-〉站点 中添加服务器地址,不要选复选框“对该区域中的所有站点要求服务器验证”。解决浏览器拦截问题,而不用更改浏览器的安全级别。

结束语
本文探讨了使用C# 2.0 在。NET2005平台上面开发ActiveX的可行性,虽然和以往的一些技术手段来比,可能有些不足,但也不失
可以作为一种特殊情况下的手段。

 
 

posted @ 2007-08-02 10:17 DalianGary 阅读(1798) | 评论 (5)编辑

2007年8月1日 #

在HTML中对.NET ActiveX的调用,与交互。
其实和普通的ActiveX调用方式没有太大不同,相信大家看了代码都明白。

 1<html>
 2    <head>
 3        <script language="javascript">
 4      function doScript()
 5       {
 6        myControl1.UserText = frm.txt.value;
 7        alert(myControl1.UserText);
 8       }

 9      
10
</script>
11</head>
12 <body color=white>
13  <hr>  
14      <font face=arial size=1>
15       <object id="myControl1" name="myControl1" classid="clsid:182AEEFE-A6D6-3014-A2FB-672AAB805E18"  codebase='DownloadActiveXNet.cab#version=1,0,0,0'>
16       </object>
17     </font>  
18     <form name="frm" id="frm">
19       <input type="text" name="txt" value="enter text here">
20       <input type=button value="Click me" onclick="doScript();">
21      
22      </form>
23  <hr>
24 </body>  
25
26</html>
27

运行后的效果如下图所示:
 

下一次再说说cab包的制作问题,即如何实现客户端下载安装的实现。
posted @ 2007-08-01 16:24 DalianGary 阅读(2050) | 评论 (6)编辑

http://homer.cnblogs.com/archive/2005/01/04/86473.aspx中看到了一篇关于如何名叫“用C#编写ActiveX控件”的文章,受益匪浅。
但该文章可能是在旧版本的.NET开发环境中实现的,在.NET 2005怎么实现也没能成功实现,于是自己从头开始做了一个开发,几经周折终于实现,现在分享给大家。
1、ActiveX在.NET中的实现
 

如上图所示在.NET中使用UserControl来实现ActiveX。代码如下。
 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Drawing;
 5 using System.Data;
 6 using System.Text;
 7 using System.Windows.Forms;
 8 using System.Runtime.InteropServices;
 9 
10 // Add in these    using clauses for this example
11 using System.Reflection;
12 using Microsoft.Win32;
13 
14 
15 namespace ActiveXDotNet
16 {
17      //[ClassInterface(ClassInterfaceType.AutoDual)]
18     public partial class myControl : UserControl, AxMyControl
19     {
20         public myControl()
21         {
22             InitializeComponent();
23         }
24 
25         private String mStr_UserText;
26 
27         public String UserText
28         {          
29             get { return mStr_UserText + " OK"; }
30             set {
31                 mStr_UserText = value;
32                 this.txtUserText.Text = value;
33             }
34         }
35 
36         private void button1_Click(object sender, EventArgs e)
37         {
38             this.txtUserText.Text = "Hello World";
39         }
40 
41         private void button2_Click(object sender, EventArgs e)
42         {
43             InputForm frmInput = new InputForm();
44             frmInput.ShowDialog();
45         }
46 
47     }
48 }
49 

2、其中,将在HTML中使用的方法在接口AxMyControl中实现,代码如下:
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace ActiveXDotNet
 6 {
 7     interface AxMyControl
 8     {
 9         String UserText { set; get; }
10     }
11 }
12 

3、Assembly.cs中的特殊设置:

1 // Setting ComVisible to false makes the types in this assembly not visible 
2 // to COM components.  If you need to access a type in this assembly from 
3 // COM, set the ComVisible attribute to true on that type.
4 [assembly: ComVisible(true)]

这样,一个简单的基于.NET的AticveX控件就开发完成了,下一次讲解具体的调用方法。
posted @ 2007-08-01 11:49 DalianGary 阅读(3776) | 评论 (10)编辑

2006年3月30日 #

http://weblogs.asp.net/justin_rogers/articles/111146.aspx
posted @ 2006-03-30 12:56 DalianGary 阅读(67) | 评论 (0)编辑

2005年12月5日 #

世界上最远的距离
不是生与死
而是我站在你的面前
你却不知道
我爱你

世界上最远的距离
不是我站在你的面前
你却不知道我爱你
而是明明知道彼此相爱
却不能在一起

世界上最远的距离,
不是知道彼此相爱,
却不能在一起,
而是明明无法抵挡这股思念,
却还得故意装作丝毫没把你放在心里

世界上最远的距离,
不是明明无法抵挡这股思念
却还得故意装作丝毫没把你放在心里
而是用一颗冷漠的心在你和爱你的人之间
掘了一条无法跨越的沟渠
posted @ 2005-12-05 09:26 DalianGary 阅读(182) | 评论 (3)编辑

2005年10月13日 #

1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文) chinaitpower.comNJMNpKx60pHmoHa

1.9 取中文日期显示——年月日时分
string strY=currentTime.ToString("f"); //不显示秒 chinaitpower.comNJMNpKx60pHmoHa

1.10 取中文日期显示_年月
string strYM=currentTime.ToString("y"); chinaitpower.comNJMNpKx60pHmoHa

1.11 取中文日期显示_月日
string strMD=currentTime.ToString("m"); chinaitpower.comNJMNpKx60pHmoHa

1.12 取当前年月日,格式为:2003-9-23
string strYMD=currentTime.ToString("d"); chinaitpower.comNJMNpKx60pHmoHa

1.13 取当前时分,格式为:14:24
string strT=currentTime.ToString("t"); chinaitpower.comNJMNpKx60pHmoHa

2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换 转为32位数字型 chinaitpower.comNJMNpKx60pHmoHa

3、 变量.ToString()
字符型转换 转为字符
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00% chinaitpower.comNJMNpKx60pHmoHa


4、变量.Length 数字型
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名 chinaitpower.comNJMNpKx60pHmoHa

5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转为比特码
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比特长度:
len = bytStr.Length; chinaitpower.comNJMNpKx60pHmoHa

6、System.Text.StringBuilder("")
字符串相加,(+号是不是也一样?)
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和国"); chinaitpower.comNJMNpKx60pHmoHa

7、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2); chinaitpower.comNJMNpKx60pHmoHa

8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远程用户IP地址 chinaitpower.comNJMNpKx60pHmoHa

9、穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
} chinaitpower.comNJMNpKx60pHmoHa

10、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什"; chinaitpower.comNJMNpKx60pHmoHa

取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll(); chinaitpower.comNJMNpKx60pHmoHa

11、String str=Request.QueryString["变量"];
用超链接传送变量。
如在任一页中建超链接:<a href=Edit.
aspx?fbid=23>点击</a>
在Edit.
aspx页中取值:String str=Request.QueryString["fdid"]; chinaitpower.comNJMNpKx60pHmoHa

12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点 chinaitpower.comNJMNpKx60pHmoHa

13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下 chinaitpower.comNJMNpKx60pHmoHa

14、 父节点.RemoveChild(节点);
删除节点 chinaitpower.comNJMNpKx60pHmoHa

15、Response
Response.Write("字串");
Response.Write(变量);
向页面输出。 chinaitpower.comNJMNpKx60pHmoHa

Response.Redirect("URL地址");
跳转到URL指定的页面 chinaitpower.comNJMNpKx60pHmoHa

16、char.IsWhiteSpce(字串变量,位数)——逻辑型
查指定位置是否空
字符
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //结果为:True, 第一个
字符是0位,2是第三个字符。 chinaitpower.comNJMNpKx60pHmoHa

17、char.IsPunctuation(''字符'') --逻辑型
字符是否是标点符号
如:Response.Write(char.IsPunctuation(''A'')); //返回:False chinaitpower.comNJMNpKx60pHmoHa

18、(int)''字符''
字符转为数字,查代码点,注意是单引号。
如:
Response.Write((int)''中''); //结果为中字的代码:20013 chinaitpower.comNJMNpKx60pHmoHa

19、(char)代码
把数字转为
字符,查代码代表的字符
如:
Response.Write((char)22269); //返回“国”字。 chinaitpower.comNJMNpKx60pHmoHa

20、 Trim()
清除字串前后空格 chinaitpower.comNJMNpKx60pHmoHa

21 、字串变量.Replace("子字串","替换为")
字串替换
如:
string str="中国";
str=str.Replace("国","央"); //将国字换为央字
Response.Write(str); //输出结果为“中央” chinaitpower.comNJMNpKx60pHmoHa

再如:(这个非常实用) chinaitpower.comNJMNpKx60pHmoHa

string str="这是<script>脚本";
str=str.Replace("<","<font><</font>"); //将左尖括号替换为<font> 与 < 与 </font> (或换为<,但估计经XML存诸后,再提出仍会还原)
Response.Write(str); //显示为:“这是<script>脚本” chinaitpower.comNJMNpKx60pHmoHa

如果不替换,<script>将不显示,如果是一段脚本,将运行;而替换后,脚本将不运行。
这段代码的价值在于:你可以让一个文本中的所有HTML标签失效,全部显示出来,保护你的具有交互性的站点。
具体实现:将你的表单提交按钮脚本加上下面代码:
string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit。
用此方法还可以简单实现UBB代码。 chinaitpower.comNJMNpKx60pHmoHa

22、Math.Max(i,j)
取i与j中的最大值
如 int x=Math.Max(5,10); // x将取值 10 chinaitpower.comNJMNpKx60pHmoHa

23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法: chinaitpower.comNJMNpKx60pHmoHa

(1)、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); } chinaitpower.comNJMNpKx60pHmoHa

(2)、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. chinaitpower.comNJMNpKx60pHmoHa

(3)、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. chinaitpower.comNJMNpKx60pHmoHa

24、IndexOf() 、LastIndexOf()
查找字串中指定
字符或字串首次(最后一次)出现的位置,返回索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个
字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个
字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置) chinaitpower.comNJMNpKx60pHmoHa

25、Insert()
在字串中指定索引位插入指定
字符。如:
str1.Insert(1,"字");在str1的第二个
字符处插入“字”,如果str1="中国",插入后为“中字国”; chinaitpower.comNJMNpKx60pHmoHa

26、PadLeft()、PadRight()
在字串左(或右)加空格或指定char
字符,使字串达到指定长度,如:
<%
string str1="中国人";
str1=str1.PadLeft(10,''1''); //无第二参数为加空格
Response.Write(str1); //结果为“1111111中国人” , 字串长为10
%> chinaitpower.comNJMNpKx60pHmoHa

27、Remove()
从指定位置开始删除指定数的
字符
字串对比一般都用: if(str1==str2){ } , 但还有别的方法: chinaitpower.comNJMNpKx60pHmoHa

1、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); } chinaitpower.comNJMNpKx60pHmoHa

2、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. chinaitpower.comNJMNpKx60pHmoHa

3、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. chinaitpower.comNJMNpKx60pHmoHa

IndexOf()
查找字串中指定
字符或字串首次出现的位置,返首索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个
字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个
字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置) 

posted @ 2005-10-13 15:06 DalianGary 阅读(404) | 评论 (0)编辑

最近遇到了一个奇怪的现象,参见说明代码:
 1        Dim a As String = "1000"
 2        Dim b As String = "1"
 3        Dim c As String = "6"
 4        Dim d As String
 5        Dim f As Long
 6
 7        d = CStr(CLng(a) * CLng(b) / CLng(c))
 8        f = (CLng(a) * CLng(b) / CLng(c)).ToString
 9
10        MessageBox.Show(d)
11        MessageBox.Show(f)

以上代码中d 和f 的值并不相同。
使用CSTR()的时候,返回值并没有四舍五入,而使用.TOSTRING()的时候进行了四舍五入。
可见,这种情况下.TOSTRING()才是我们期待的结果,如果使用CSTR()的话将返回错误的值。
所以建议尽量使用VB.NET的函数,放弃VB老版本的函数。
posted @ 2005-10-13 10:54 DalianGary 阅读(2826) | 评论 (3)编辑

2005年10月12日 #

     摘要: MS SQLSERVER 只能得到存储过程的创建语句,方法如下:sp_helptext procedureName但是往往我们需要得到表的创建语句,比如说在数据库升级的时候判断某个表是否已经改变,或者已经有一个表存在,但不知道它的创建语句是什么,字段有没有约束,有没有主键,创建了哪些索引等等.下面我给出一个存储过程,供读者参考.该存储过程可以得到你想得到的所有的表的创建语句,包括和表有关的索引的创... 阅读全文
posted @ 2005-10-12 15:16 DalianGary 阅读(495) | 评论 (1)编辑

     摘要: 1ifexists(select*fromsysobjectswhereid=2object_id('spu_GenerateInsert'))3dropprocedurespu_GenerateInsert4GO567CREATEPROCEDUREspu_GenerateInsert8@tablevarchar(128)9AS102627--declaresomevariablesthatwil... 阅读全文
posted @ 2005-10-12 14:45 DalianGary 阅读(778) | 评论 (1)编辑