2011-10-06 153 views
0

我似乎有一些运气不好的任何事件超出formX_load(..)运行。这就是我希望这里有人能帮助我。Form1_Move()永远不会触发

我开始了一个空的项目,在它上面添加了一个标签(label1),并将代码从MSDN的示例中复制出来。 (我在自己的标签文本中添加)。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.move%28v=vs.80%29.aspx

private void Form1_Move(object sender, System.EventArgs e) 
{ 
this.Text = "Form screen position = " + this.Location.ToString(); 
label1.Text = "You Moved Me!"; 
} 

一切编译和运行,但没关系,我是多么移动或重新大小形成不会改变标签文字或格式文本。

我也尝试过使用OnMove,OnMouseMove和LocationChanged的例子来解决同样的问题......它们似乎永远不会被触发。

缺少什么我在这里?这似乎太容易能够搞砸了,但唉...

感谢您的时间。

+1

您是否真的为OnMove事件添加处理程序? – Icarus

+0

我在这里出去,说不。我至少5年没有碰过C#,并且锈迹斑斑... – challengerTA

+0

@challenferTA看到我的答案。 – Icarus

回答

2

这工作:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     this.Move +=new EventHandler(Form1_Move); 
    } 

    private void Form1_Move(object sender, System.EventArgs e) 
    { 
     this.Text = "Form screen position = " + this.Location.ToString(); 
    } 

} 
+0

那工作得很好!我想一个经验法则是,对于任何想要让你必须在开始时创建一个像这样的事件处理程序的事件?我很多年都不用C#,所以我不得不重新学习一切。非常感谢你! – challengerTA

2

重写OnMove应该有工作,是首选的方法。您是否在您的覆盖方法中调用了基类OnMove方法?

对于_Move事件,您是否在创建Form实例时连接了事件处理函数?

喜欢的东西:

this.Move += this.Form1_Move; 
+0

我没有想到要这样做。我是在假设MSDN“examples”是正在运行的例子,并且我不需要做其他任何事情来让他们工作的情况下运行的。显然是一个致命的错误。 是你在那里加入事件和处理程序的首选方式?还是萨米奇的方法更合适? 这两个工作,我真的很感谢你的帮助。 – challengerTA

+0

是否重写OnMove或处理事件是个人选择。我一直认为重写*你自己的类中的On *方法是首选。显然,如果你使用别人的课程,你将不得不处理该事件。 –

+0

下面是一个可能有所帮助的链接:http://stackoverflow.com/questions/3670806/form-load-event-or-override-onload –

1

有2个答案已经解释了如何添加处理程序 - 作为我对我的comment-提及。如果您更愿意从Visual Studio中执行此操作,只需加载表单设计器,查看属性(通常位于右下角),单击事件选项卡并双击OnMove的事件。一旦你双击它,VS会自动为你添加处理程序,并带你进入方法的主体,这样你就可以将代码放在那里。

enter image description here

+0

你为我拍了截图吗?这对未来非常有用。我记得在做VB6时做类似的事情。再次感谢您的帮助。我希望我有一个以上的向上箭头给予。 – challengerTA

+0

@challengerTA感谢和1 upvote是绰绰有余。 ;) – Icarus

相关问题