none
重写BUTTON事件问题. RRS feed

  • 问题

  • 我想重写BUTTON的CLICK事件,想让它在没有写代码的情况下,单击就弹出一个对话框,可是不知道怎么做.

    第一步:

    新键一个工程,编辑FORM1代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public class MyBtuuon : Button //就是这里不知道怎么写
      {
        public MyBtuuon()
        {
    
        }
    
        protected override void OnClick(EventArgs e)
        {
          base.OnClick(e);
        }
      };
    
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
      }
    }
    
    

     

    在上面那个类里的代码不知道怎么写,还有,如果写完了那个类,然后该怎么做?本人新手,麻烦一步一步的教我可以不?

    2010年11月27日 13:57

答案

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    namespace WinFormTest
    {
        class MyButton : Button
        {
            protected override void OnClick(EventArgs e)
            {
                base.OnClick(e);
                MessageBox.Show("Hello world.");
                
            }
        }
    }

     

    namespace WinFormTest
    {
        partial class Form1
        {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;

            /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }

            #region Windows 窗体设计器生成的代码

            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.button1 = new MyButton();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(197, 227);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(75, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "button1";
                this.button1.UseVisualStyleBackColor = true;
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(284, 262);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.ResumeLayout(false);

            }

            #endregion

            private MyButton button1;
        }
    }

    • 已标记为答案 Ballsky 2010年11月29日 11:15
    2010年11月28日 4:18
  • 你好:

    首先你需要新建类库来创建该新控件,生成dll文件。在你的主程序中,打开控件库,将之前的dll文件导入,此新控件将会出现在控件库中。使用时直接拖到对话框上。

    详情请参考www.cnblogs.com/hackenliu/archive/2008/07/23/1249885.html
    http://www.cnblogs.com/gczhao/archive/2010/10/21/1857540.html
    http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html


    I am here!
    • 已标记为答案 Ballsky 2010年11月29日 11:15
    2010年11月29日 3:33
    版主
  • 老兄

    我重写之类,然后切换回窗体设计那时发现全变样了,只是显示"若要在类中添加组件,请从工具箱中拖出它们,然后使用"属性"窗口来设置它们的属性.若要为类方法和事件,请单击此处切换到代码视图."

    这个怎么办啊?怎么变回原来的窗体设计那里?


    最简单的就是ctrl+z,或者到相应的xxx.Designer.cs文件下删除MyButton定义的代码。

    也可参考BoberSong的建议,如果有长远的规划,就好是单独创建一个类库。

    所有的操作都已告诉您了,并且我也已在本地测试通过。或许有些操作您不太熟练,可以边操作边在网上搜索相关的主题。祝你早日实现。

    • 已标记为答案 Ballsky 2010年11月29日 11:15
    2010年11月29日 7:35
    版主

全部回复

  • 您好,请参考:

    1、单独创建一个类文件来写MyButton,不要和Form1放在一起。

    2、代码如:

        public class MyBtuuon : System.Windows.Forms.Button     {
            public MyBtuuon()
            {

            }

            protected override void OnClick(EventArgs e)
            {
                base.OnClick(e);
                MessageBox.Show("My code");//该行代码放在base.OnClick(e);下面或上面均可,视您的需求而定,写个代码测一下,就能发现区别。
            }
        }

    3、随便托一个Button,通常会创建一个button1实例,其初始化代码在Form1.Designer.cs中, 然后按着button1的代码来写即可。

        或者将MyButton添加到选项卡中,也就是放在工具箱中,这样以后使用方便,也只要拖拽即可,详细地步骤请在网上搜索一下。

    2010年11月28日 2:39
    版主
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    namespace WinFormTest
    {
        class MyButton : Button
        {
            protected override void OnClick(EventArgs e)
            {
                base.OnClick(e);
                MessageBox.Show("Hello world.");
                
            }
        }
    }

     

    namespace WinFormTest
    {
        partial class Form1
        {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;

            /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }

            #region Windows 窗体设计器生成的代码

            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.button1 = new MyButton();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(197, 227);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(75, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "button1";
                this.button1.UseVisualStyleBackColor = true;
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(284, 262);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.ResumeLayout(false);

            }

            #endregion

            private MyButton button1;
        }
    }

    • 已标记为答案 Ballsky 2010年11月29日 11:15
    2010年11月28日 4:18
  • 能说得清楚些吗?怎么添加到工具箱中?
    2010年11月28日 11:49
  • 工具箱点右键-->选择项-->然后点浏览选择含有MyButton的dll
    2010年11月28日 12:45
    版主
  • 老兄

    我重写之类,然后切换回窗体设计那时发现全变样了,只是显示"若要在类中添加组件,请从工具箱中拖出它们,然后使用"属性"窗口来设置它们的属性.若要为类方法和事件,请单击此处切换到代码视图."

    这个怎么办啊?怎么变回原来的窗体设计那里?

    2010年11月28日 14:41
  • 你好:

    首先你需要新建类库来创建该新控件,生成dll文件。在你的主程序中,打开控件库,将之前的dll文件导入,此新控件将会出现在控件库中。使用时直接拖到对话框上。

    详情请参考www.cnblogs.com/hackenliu/archive/2008/07/23/1249885.html
    http://www.cnblogs.com/gczhao/archive/2010/10/21/1857540.html
    http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html


    I am here!
    • 已标记为答案 Ballsky 2010年11月29日 11:15
    2010年11月29日 3:33
    版主
  • 老兄

    我重写之类,然后切换回窗体设计那时发现全变样了,只是显示"若要在类中添加组件,请从工具箱中拖出它们,然后使用"属性"窗口来设置它们的属性.若要为类方法和事件,请单击此处切换到代码视图."

    这个怎么办啊?怎么变回原来的窗体设计那里?


    最简单的就是ctrl+z,或者到相应的xxx.Designer.cs文件下删除MyButton定义的代码。

    也可参考BoberSong的建议,如果有长远的规划,就好是单独创建一个类库。

    所有的操作都已告诉您了,并且我也已在本地测试通过。或许有些操作您不太熟练,可以边操作边在网上搜索相关的主题。祝你早日实现。

    • 已标记为答案 Ballsky 2010年11月29日 11:15
    2010年11月29日 7:35
    版主