部分类中的表单控件属性

时间:2014-02-03 08:44:21

标签: c# winforms

我尝试进行一些表单控件,如Minimize,Exit和drag form,但似乎不起作用。我认为部分类的问题,但搜索后,我找不到解决方案,使这项工作。

注意:由于某种原因,我无法删除命名空间和部分。我必须改变什么,或者宣布等等?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    using System.Net.Sockets;
    using System.Net;

    namespace test
    {   
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

//Minimize (Not Work)
            private void Form1_Resize(object sender, EventArgs e)
            {
                if (FormWindowState.Minimized == this.WindowState)
                {
                    notifyTray.Visible = true;
                    notifyTray.ShowBalloonTip(500);
                    this.Hide();
                }

                else if (FormWindowState.Normal == this.WindowState)
                {
                    notifyTray.Visible = false;
                }
            }

//Exit (Not Work)
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                var window = MessageBox.Show("Wanna Close?", "Warning", MessageBoxButtons.YesNo);
                if (window == DialogResult.No) e.Cancel = true;
                else e.Cancel = false;
            }

//Drag (Not Work)
        public bool _dragging = false;
        public Point _offset;
        public Point _start_point = new Point(0, 0);

        void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            _dragging = true;  // _dragging is your variable flag
            _start_point = new Point(e.X, e.Y);
        }

        void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            _dragging = false;
        }

        void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (_dragging)
            {
                Point p = PointToScreen(e.Location);
                Location = new Point(p.X - this._start_point.X, p.Y - this._start_point.Y);
            }
        }

在VB中代码工作正常。

3 个答案:

答案 0 :(得分:1)

Tony意味着您在表单的Designer中挂钩处理程序,例如

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormClosing); 

这就是它被钩住的地方。问题是你可能已经在几个文件中定义了它(或者没有挂钩它们)。

尝试将该类放在不同的命名空间中,并检查您的InitializeComponent是否转到设置了挂钩函数的设计器。

答案 1 :(得分:0)

“partial”关键字表示可以在多个文件中找到类的代码。 Visual Studio中的表单设计器自动创建一个Form1.Designer.cs类,其中放置代码以创建拖动到表单上的控件。

  • 当您尝试从partial中删除Form1关键字时,编译器会告诉您Form1.Designer.cs包含同一类的部分定义。
  • 当您更改命名空间时,两者将成为单独的类,但Form1.cs调用另一个类中定义的InitializeComponent()

答案 2 :(得分:0)

(代表问题作者发布了解决方案)

  

感谢@Tony为我指出。我需要像

这样在C#中手动添加事件处理程序
this.Closing += Form1_FormClosing; //for close button