很多光盘上的程序,比如电脑迷光盘,开头总有一段动画,用来展现企业品牌和LOGO之用。这个动画是Flash做的,而且嵌入到程序中简直做到无缝融合,因为右键点击它也不会有那特有而烦人的Flash右键菜单。 因此将Flash融合到WinForm中能够增强程序的多媒体效果和炫丽的外观。现在我们就来看看在C#桌面程序中如何插入Flash视频,而且去掉烦人的右键菜单。 首先要插入Flash就必须使用Flash控件,在工具栏右键选择“选择项…”,然后在“COM组件”面板下点击“浏览”按钮,在本机电脑C:\WINDOWS\system32\Macromed\Flash\目录里选择Flash8.ocx(也有可能是Flash9F.ocx,版本不同所致),然后点击确定就可以了。但到这里还没有完,因为要使用Flash控件必须注册它。 在CMD里面输入如下: regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash8.ocx 系统会提示注册成功,这个时侯就可以在VS2008里面使用该控件了! 打开VS2008,新建一个Windows程序,然后把刚才我们选择的Flash控件Shockwave Flash Object拖到窗体中,这时窗体中会出现一个白色的矩形框,Name属性我们设置为Myflash,在里面可以播放我们需要的swf文件。 注意到该控件主要有几个属性: Name属性,这个是所有对象都会有的。 Menu属性,这个是Flash菜单项,默认值为true,也就是右键的时候会出现完整的Flash菜单,如果设置为False,则只出现最简的菜单(设置与关于)。 Move属性,这个属性是用来指定要播放的Flash文件的。 Playing属性,指定是否装在影片之后马上播放。 Quality属性,设置影片的质量。 Scalemode属性,设置影片的缩放模式。 Visible属性,设置影片控件的可视与否。 接下来我们在窗体中放置一个按钮,Text属性设置为LoadSwf。双击添加事件代码如下: OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Flash文件|*.swf"; DialogResult dr = ofd.ShowDialog(); if (dr == DialogResult.OK) { Myflash.Movie = ofd.FileName; Myflash.Play(); } 这样当程序运行的时候点击按钮会要我们选择一个SWF文件,选择好后确定就自动播放了! 当然,我们还可以添加一些按钮,分别为Play,Pause Play按钮的播放功能如下: This.Myflash.Play(); Pause按钮的暂停功能如下: This.Myflash.StopPlay(); 这里就不再啰嗦了,各位园友可以自行去研究一些常用的功能。下面我们主要来讲解如何消去烦人的Flash右键菜单! 消去Flash右键菜单有两种方法(本人愚笨,到目前只发现这两种): 方法一: 这个方法比较复杂,也比较繁琐,主要是用到API函数的调用。代码如下: #region 去掉Flash右键菜单,API函数的声明 private const int GWL_WNDPROC = -4; public delegate IntPtr FlaWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); private IntPtr OldWndProc = IntPtr.Zero; private […]
View Details前言:编写一个Windows服务程序,定时从数据库中拿出记录发送邮件。 测试环境:Visual Studio 2005 SP1、Windows Server 2003 SP2 一、新建项目 打开VS2005,新建一个“Windows 服务”项目。 二、添加Timer 展开“工具箱”,在“组件”标签下找到“Timer”双击,这时就添加了一个Timer组件,修改“Name”属性为“timEmail”、“Enabled”为“false”、“Interval”为“60000”。 接下来要做一些修补工作,不知是VS2005的BUG还是我没找着地方,在VS2003下是不存在该问题的:刚从“组件”下添加的“Timer”按理说应该来自“System.Timers命名空间”,也只有“System.Timers.Timer”才能在Windows服务程序中正常工作,但是现在这个Timer却是属于“System.Windows.Forms.Timer”的。所以得稍作修改,打开“.Designer.cs”文件,修改如下: #region 组件设计器生成的代码//……..以上略/// <summary> /// 设计器支持所需的方法 – 不要/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){ this.components = new System.ComponentModel.Container(); //this.timEmail = new System.Windows.Forms.Timer(this.components);原 this.timEmail = new System.Timers.Timer();//改 this.timEmail.Interval = 60000; this.ServiceName = "Service1";}#endregion//private System.Windows.Forms.Timer timEmail;原private System.Timers.Timer timEmail;//改 三、添加配置文件 服务每次调用配置文件,获取一些基本参数,这样一些变更就可直接修改配置文件而不必修改代码。新建ServiceConfig.xml存放于项目“Bin\Debug\”下: <?xml version="1.0" encoding="utf-8" ?> <serviceConfig> <serviceItem name="sendEmail" enable="true" elapsed="60000" connectionString="your database connection…" smtp="smtp address" account="your email account…" password="your password…" > </serviceItem></serviceConfig>四、以下是实现代码 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.ServiceProcess;using System.Text;using System.Xml;//操作配置文件using System.IO;//写日志using System.Threading;//使用线程 namespace […]
View Details在winform中有一个控件可以显示html的内容,该控件就是webbrowser,设置它的DocumenText属性为HTML的内容即可。 在使用WebBrowser做UI的时候,我们有时不希望里面的链接被用户点击,更不希望弹出烦人的脚本错误提示框,也不希望用户能点出右键的IE菜单,要做到这些,其实都是很easy地…
1 |
<div><span style="color: #008000">//</span><span style="color: #008000">设置webBrowser </span><span style="color: #008000"><br /></span><span style="color: #000000">webBrowser1.ScriptErrorsSuppressed </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">; </span><span style="color: #008000">//</span><span style="color: #008000">禁用错误脚本提示 </span><span style="color: #008000"><br /></span><span style="color: #000000">webBrowser1.IsWebBrowserContextMenuEnabled </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">; </span><span style="color: #008000">//</span><span style="color: #008000">禁用右键菜单 </span><span style="color: #008000"><br /></span><span style="color: #000000">webBrowser1.WebBrowserShortcutsEnabled </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">; </span><span style="color: #008000">//</span><span style="color: #008000">禁用快捷键 </span><span style="color: #008000"><br /></span><span style="color: #000000">webBrowser1.AllowWebBrowserDrop </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">禁止拖拽</span><span style="color: #008000"><br /></span><span style="color: #000000">webBrowser1.ScrollBarsEnabled </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">禁止滚动条</span></div> |
禁用错误脚本提示 :将 WebBrowser控件的 ScriptErrorsSuppressed 设为 true 禁用右键菜单 :将 WebBrowser 的 IsWebBrowserContextMenuEnabled 设为 false 禁用快捷键 :将 WebBrowser 的 WebBrowserShortcutsEnabled 设为 false 禁用超链接 :超链接分为两种,一种是 当前窗口直接转向, 一种是 在新窗口中打开 当然窗口直接转向:将 WebBrowser 的 AllowNavigation 设为 false 禁用新窗口打开,需要处理 WebBrowser 的 NewWindow 事件
1 |
<div><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> webBrowser1_NewWindow(</span><span style="color: #0000ff">object</span><span style="color: #000000"> sender, CancelEventArgs e) <br />{ <br /> e.Cancel </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">; <br />} </span></div> |
做完上面的工作,基本就完工了,还有最后一点需要注意,那就是 Drag-And-Drop 。记得将 WebBrowser 的 AllowWebBrowserDrop 设为 false
View Details新的 DataGridView 是 .NET 2.0 中的一个新控件,是针对 .NET 1.x 中功能较差的标准 DataGrid 控件而设计的。Matthew MacDonald 在本文中论述了许多改进,包括:DataGridView 支持大量自定义和细致的格式设置、灵活的大小调整和选择、更好的性能以及更丰富的事件模型。 .NET Framework 的前两个版本(.NET 1.0 和 .NET 1.1)在数据绑定方面留下了明显的空白。尽管开发人员拥有一个灵活的可配置模型,可以将几乎所有的控件链接到几乎所有的数据源,但却没有一种有效的方法来显示完整的信息表。可以实现此目的的唯一工具就是 DataGrid 控件,这种控件非常适合于处理简单的演示,但是不太适合实际代码。 填补这项空白是 .NET 2.0 的主要目标之一,并且 Microsoft 已经用全新的网格控件 DataGridView 来实现此目标。DataGridView 有两个指导原则。首先,其目标是支持常见任务(如主控/详细列表、验证和数据格式设置),而不需要您编写许多代码。更重要的是,设计过程中始终考虑了扩展性,因此您可以集成所需的专用功能,而不必采用低级别的复杂编程。 本页内容 基本数据绑定 美化 DataGridView 使用 DataGridView 选择单元格 DataGridView 对象 DataGridView 样式 自定义单元格格式 按钮列 图像列 编辑 DataGridView 处理错误 验证输入 使用列表列约束选择 小结 基本数据绑定 熟悉 DataGridView 的最佳方法就是实际尝试一下,无需配置任何属性。就像 DataGrid 一样,您可以使用 DataSource 属性来绑定 DataTable 对象(或从 DataTable 派生的对象)。
1 |
Dim ds As DataSet = GetDataSet()DataGridView1.DataSource = ds.Tables("Customers") |
与 DataGrid 不同的是,DataGridView 一次只能显示一个表。如果绑定整个 DataSet,则不会显示任何数据,除非您使用要显示的表名设置了 DataMember 属性。
1 |
DataGridView1.DataSource = dsDataGridView1.DataMember = "Customers" |
基本的 […]
View DetailsDataGridView 密码列(显示为*号)的设置 代码
1 |
<div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080"> 1</span> <span style="color: #000000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><summary></span><span style="color: #008000"><br /></span><span style="color: #008080"> 2</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> 单元格显示格式事件<br /></span><span style="color: #008080"> 3</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"></summary></span><span style="color: #008000"><br /></span><span style="color: #008080"> 4</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><param name="sender"></param></span><span style="color: #008000"><br /></span><span style="color: #008080"> 5</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><param name="e"></param></span><span style="color: #808080"><br /></span><span style="color: #008080"> 6</span> <span style="color: #808080"> </span><span style="color: #000000"> </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> dataGridView1_CellFormatting(</span><span style="color: #0000ff">object</span><span style="color: #000000"> sender, DataGridViewCellFormattingEventArgs e)<br /></span><span style="color: #008080"> 7</span> <span style="color: #000000"> {<br /></span><span style="color: #008080"> 8</span> <span style="color: #000000"> </span><span style="color: #008000">//</span><span style="color: #008000"> 把第4列显示*号,*号的个数和实际数据的长度相同</span><span style="color: #008000"><br /></span><span style="color: #008080"> 9</span> <span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (e.ColumnIndex </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #800080">3</span><span style="color: #000000">)<br /></span><span style="color: #008080">10</span> <span style="color: #000000"> {<br /></span><span style="color: #008080">11</span> <span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (e.Value </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000"> </span><span style="color: #000000">&&</span><span style="color: #000000"> e.Value.ToString().Length </span><span style="color: #000000">></span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">)<br /></span><span style="color: #008080">12</span> <span style="color: #000000"> {<br /></span><span style="color: #008080">13</span> <span style="color: #000000"> e.Value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> </span><span style="color: #0000ff">string</span><span style="color: #000000">(</span><span style="color: #800000">'</span><span style="color: #800000">*</span><span style="color: #800000">'</span><span style="color: #000000">,e.Value.ToString().Length);<br /></span><span style="color: #008080">14</span> <span style="color: #000000"> }<br /></span><span style="color: #008080">15</span> <span style="color: #000000"> }<br /></span><span style="color: #008080">16</span> <span style="color: #000000"> }<br /></span><span style="color: #008080">17</span> <span style="color: #000000"><br /></span><span style="color: #008080">18</span> <span style="color: #000000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><summary></span><span style="color: #008000"><br /></span><span style="color: #008080">19</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> 编辑单元格控件事件<br /></span><span style="color: #008080">20</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"></summary></span><span style="color: #008000"><br /></span><span style="color: #008080">21</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><param name="sender"></param></span><span style="color: #008000"><br /></span><span style="color: #008080">22</span> <span style="color: #008000"> </span><span style="color: #808080">///</span><span style="color: #008000"> </span><span style="color: #808080"><param name="e"></param></span><span style="color: #808080"><br /></span><span style="color: #008080">23</span> <span style="color: #000000"> </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> dataGridView1_EditingControlShowing(</span><span style="color: #0000ff">object</span><span style="color: #000000"> sender, DataGridViewEditingControlShowingEventArgs e)<br /></span><span style="color: #008080">24</span> <span style="color: #000000"> {<br /></span><span style="color: #008080">25</span> <span style="color: #000000"> </span><span style="color: #008000">//</span><span style="color: #008000"> 编辑第4列时,把第4列显示为*号</span><span style="color: #008000"><br /></span><span style="color: #008080">26</span> <span style="color: #000000"> TextBox t </span><span style="color: #000000">=</span><span style="color: #000000"> e.Control </span><span style="color: #0000ff">as</span><span style="color: #000000"> TextBox;<br /></span><span style="color: #008080">27</span> <span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (t </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /></span><span style="color: #008080">28</span> <span style="color: #000000"> {<br /></span><span style="color: #008080">29</span> <span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #0000ff">this</span><span style="color: #000000">.dataGridView1.CurrentCell.ColumnIndex </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #800080">3</span><span style="color: #000000">)<br /></span><span style="color: #008080">30</span> <span style="color: #000000"> t.PasswordChar </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800000">'</span><span style="color: #800000">*</span><span style="color: #800000">'</span><span style="color: #000000">;<br /></span><span style="color: #008080">31</span> <span style="color: #000000"> </span><span style="color: #0000ff">else</span><span style="color: #000000"><br /></span><span style="color: #008080">32</span> <span style="color: #000000"> t.PasswordChar </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> </span><span style="color: #0000ff">char</span><span style="color: #000000">();<br /></span><span style="color: #008080">33</span> <span style="color: #000000"> }<br /></span><span style="color: #008080">34</span> <span style="color: #000000"> }</span></div> |
1 |
|
1 |
|
一:Win Form登录机制的实现Main窗体为应用程式主窗体,Login为登录窗体.两种实现方式如下:1、应用程式入口放在Login窗体,在Login窗体实现登录机制,验证通过则创建Main窗体的实例,并将自身隐藏.具体实现: ///Step1:验证登录///Step2:通过this.hide( );oMain.Show( );虽然可以实现登录机制,但是Login窗体并没有释放掉,而是被隐藏掉,内存资源未有效利用.这种方式其实是不可取的.2、应用程式入口放在Main窗体,在Main函数中创建Login窗体的实例,Login窗体完成登录验证,返回Main窗体,程式继续执行.需要注意的是Login窗体只有验证通过时返回值才为DialogResult.OK,其余时返回DialogResult.None.这样在Main窗体就可以根据返回值判断是否创建Main窗体的实例./// <summary>/// 应用程序的主入口点./// </summary>[STAThread]static void Main( ){ frmLogin login = new frmLogin( ); login.ShowDialog( ); if( login.DialogResult.Equals( DialogResult.OK ) ) { login.Close( ); Application.Run( new frmMain( ) ); }} 二:利用ImageList作为Resource的载体Win Form的程式,外部文件是比较烦人的事情,这里采用Resource将外部图片文件加载到程式中.而ImageList是一个不错的选择,使用简单.具体实现: ///Step1:将图片在可是模式下加载到ImageList中. ///Step2:程式中可以采用this.imgLstResource.Images[index]的方式获取其中的Image对象.
View Details通知区域中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制。这些进程不会具有自己的用户界面。NotifyIcon 类提供了编写此功能的方法。Icon属性定义显示在通知区域中的图标。图标的弹出菜单由 ContextMenu属性确定。Text属性分配工具提示文本。要在通知区域中显示图标,必须将 Visible属性设置为 true。 具体使用方法: (1)新创建一个项目Form1,text属性修改为托盘演示;(2)向Form1窗口中添加一个NotifyIcon控件,修改其Name属性为 MyNotifyIcon。修改其Text属性为 托盘演示,与应用程序的标题相同。这是因为NotifyIcon显示在系统托盘中时,Text属性中保存的 文本为鼠标移动到程序图标上时的提示信息。修改Icon属性,为NotifyIcon添加一个图标;(3)在Form1的属性窗口上,把Icon属性也选择为与NotifyIcon相同的图标。修改ShowInTaskBar属性值为 False,这样,应用程序在运行时就不会出现在任务栏中;(4)添加双击NotifyIcon时的事件处理代码(DoubleClick) private void MynotifyIcon_DoubleClick(object sender, System.EventArgs e) { if(this.Visible) { this.Hide(); }else { this.Show(); } }(5)在使用NotifyIcon控件时,经常需要用到快捷菜单(ContextMenu控件)。使用方法为,向Form1中添加contextmenu控件,添加两个功能,一个为打开主界面,一个为退出。在NotifyIcon的ContextMenu属性中选择刚刚添加的ContextMenu控件。这样在图标上可以通过快捷菜单执行程序的各种功能。 在功能的单击事件中代码如下: private void 打开主界面ToolStripMenuItem_Click(object sender, EventArgs e) { if (this.Visible) { this.Hide(); } else { this.Show(); } } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } 这篇文章继续介绍系统托盘NotifyIcon的使用,项目实现效果为:最小化窗体时,在系统托盘区域显示程序图标,并有气球提示,时间为30秒。效果如图,具体实现如下: 1、创建一个新的项目From1;修改其Text属性为“系统托盘演示”,修改其ShowInTaskbar属性为False,为其添加一个图标。 2、添加一个NotifyIcon控件NotifyIcon1,修改其Text属性为“系统托盘演示”,为其添加一个图标,与From1图标相同。 3、添加一个ContextMenuStrip控件ContextMenuStrip1,添加两个MenuItem,Text属性分别为打开,退出。 并在NotifyIcon控制中的ContextMenuStrip属性中选择刚刚创建的ContextMenuStrip1控件。 4、下面将处理具体事件: (1)Form1_SizeChanged事件,效果为最小化窗体时,在系统托盘区域显示程序图标及气球提示: private void Form1_SizeChanged(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { this.Hide(); this.notifyIcon1.Visible = true; this.notifyIcon1.ShowBalloonTip(30, "注意", "大家好,这是一个事例", ToolTipIcon.Info); } […]
View Details在启动一个程序时,我们希望窗口显示的位置处于屏幕的正中心,可以如下设置: MainForm mainForm = new MainForm(); mainForm.StartPosition = FormStartPosition.CenterScreen;mainForm.Show();如果在允许操作主窗口之前,必须先登录,则弹出登录窗口。此时主窗口出现在登录窗口后面,无法进行操作。 MainForm mainForm = new MainForm(); LoginForm dlg=new LoginForm(); dlg.ShowDialog(); 这里ShowDialog方法表示你必须先操作完dlg窗口,才能操作后面的主窗体。 如果要登录窗口显示在主窗口的中心,则在显示之前设置如下 dlg.StartPosition = FormStartPosition.CenterParent; dlg.ShowDialog(); 能够这样做的前提是主窗体必须先定义和显示。否则登录窗体可能无法找到父窗体。 除此之外,也可以手动设置窗口显示的位置,即窗口坐标。 首先必须把窗体的显示位置设置为手动。 dlg.StartPosition=FormStartPosition.Manual; 随后获取屏幕的分辨率,也就是显示器屏幕的大小。 int xWidth = SystemInformation.PrimaryMonitorSize.Width;//获取显示器屏幕宽度 int yHeight = SystemInformation.PrimaryMonitorSize.Height;//高度 然后定义窗口位置,以主窗体为例 mainForm.Location = new Point(xWidth/2, yHeight/2);//这里需要再减去窗体本身的宽度和高度的一半 mainForm.Show(); 这样三步之后,一个准确定位在屏幕位置上的窗体就显示出来了。 用Point类时,必须先把它包含进来,在程序最前面写上: using System.Drawing;
View Details目前常见的有两种方法,基本上大同小异 : 第一种: 在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: public static yourMainWindow pCurrentWin = null; 然后在主窗体构造函数中,给静态成员初始化,如下: pCurrentWin = this; 那么在子窗体中调用父窗体,可以通过“主窗体类名. pCurrentWin”来操作当前的主窗体。 第二种: 是在子窗体中定义一个私有成员,来保存当前主窗体对象,例如: private yourMainWindow pParentWin = null; 然后在子窗体构造函数中,加一参数,如下: public yourChildWindow( yourMainWindow WinMain ) { pParentWin = WinMain; //Other code } 在主窗体创建子窗体的时候,要把this作为参数来构造子窗体,这样在子窗体中调用父窗体,可以直接用“this.pParentWin”就可以了 不过以上所述的两种方法,只是让你能够访问当前主窗体对象,那么如何操作控件,很多人直接修改控件的成员访问符,即把“private”改为“public”,我觉得这样破坏了本身类的封装,所以我比较喜欢的做法是为控件增加公有属性或方法来供调用,例如: public string ButtonText { get{ return btn.Text;} set{ btn.Text = value;} } public void Button_Click() { this.btnDConvert.PerformClick();//Execute button click }
View Details