繁体   English   中英

确定主菜单中无模式形式的选定按钮

[英]Determining A Selected Button In a Modeless Form In the Main From

我正在制作工具箱类型的东西。 无模式对话框应位于屏幕顶部并提供选择选项,然后主窗体应根据所按下的按钮执行选项。 如何确定从主窗体的无模式对话框中选择了哪个按钮?

您在连接到每个按钮的无模式对话框上都有一个事件处理程序。 单击/切换按钮时,将触发此事件处理程序,从而告诉您该按钮已单击/切换。

然后,您可能希望将此通知转发到父窗口。 您可以通过在主窗体上调用事件处理程序,并将当前所选按钮的标识符作为事件参数的一部分传递来完成此操作。 这里唯一棘手的部分是,为了在主窗体上调用事件处理程序,浮动调色板窗体必须维护对主窗体的引用。 您可以手动执行此操作,但无需这样做,因为浮动调色板始终始终由主对话框拥有 (以确保它实际上按Z顺序浮动在其顶部),因此您可以简单地通过使用浮动面板的Owner属性检索对主对话框的引用。 将其强制转换为主要表单的类型,并引发事件。 在为主表单类定义的事件处理函数中根据需要处理事件。

如果您不需要在主窗体上收到通知,则只需在浮动调色板窗体中跟踪状态,并在需要了解状态时从主窗体中读取状态即可。 这将要求主窗体保留对浮动调色板的引用。 最简单的方法是让主表单类具有一个成员变量,该成员变量包含浮动调色板表单的实例。 无论如何 ,这是最好的设计,它将使您能够从主窗体访问/设置浮动面板上的数据。 它略微增加耦合,其中有些人会说是一种面向对象设计的气味,但是这两个对象 ,在现实中,很紧密耦合,所以这真的不是一个问题。

您会注意到,在上面的几个地方,我将您的“无模式表单”称为“浮动调色板”。 这是因为您要描述的设计实际上是在诸如Photoshop之类的复杂应用程序中相当普遍的情况,这些应用程序具有浮动的调色板窗口,您可以从中选择工具。 Paint.NET(用C#编写)也可以做到这一点,并且可能实现了我所描述的很多方法。

使新的C#程序员感到震惊的最大事情是了解 实例之间的区别。 该类是一个抽象对象,它包含创建对象的所有必要信息。 实例是实际对象本身。 每种类类型只有一个类定义,但是每种类类型可以有多个实例/对象。 例如,假设您有一个名为MainForm的主窗体类。 它包含您主要表单的所有代码(事件,属性,方法等)。 这是一堂课。 为了实际显示或与您的主窗体交互 ,您将需要创建该MainForm类的实例 新手程序员遇到的问题是尝试访问类本身而不是实例 (对象)的属性或调用函数。 这就是为什么我要谨慎地说,您需要维护对浮动调色板的引用-这是指您的浮动调色板表单类的特定实例 确保您了解这种区别; 有关更多信息,请查阅有关使用C#(或任何其他面向对象的语言)编程的常用文字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM