我有一个非常复杂的.NET应用程序,它包含剪切/复制/粘贴功能。我想根据所选的控件/内容启用/禁用剪切/复制/粘贴按钮。该应用程序有许多用户控件。实现这一目标的最佳方法是什么?
由于
答案 0 :(得分:1)
您是在谈论抓住控件的焦点还是设计模式来实现这一目标?
我可能会使用它所依赖的控件注册要启用/禁用的每个控件。然后,当从属控件被选中/聚焦时,旋转控件并启用/禁用每个控件。这几乎是observer pattern。
例如:
在OnInit中:
selectedControl1.AddObserver(button1);
selectedControl1.AddObserver(button2);
selectedControl1.AddObserver(textBox1);
selectedControl2.AddObserver(button1);
selectedControl2.AddObserver(textbox3);
在OnFocused中:
foreach(Control ctl in selectedControl1.Observers)
{
ctl.Enabled = true;
}
像这样......
答案 1 :(得分:0)
一种方法:
为您要监视的每个控件的相应事件添加一个委托。
e.g。 :
textBox.GotFocus += myFunctionalityEnabler;
答案 2 :(得分:0)
使用Tags和LINQ
查看您可以使用标记对象来保存信息,然后使用LINQ查询该表单/应用程序的控件。根据您的结果,您可以根据需要设置属性。这可能是一种比观察者模型更好的方法,就好像不管理它会导致内存泄漏和性能下降。
只是一个建议。
答案 3 :(得分:0)
一种方法: 创建ExtenderProvider以添加剪切,复制和粘贴属性 每一个控制。将委托添加到每个控件的GotFocus事件中,并根据扩展属性值启用/禁用委托中的每个按钮。
另一种方法: 使用Form_Load中的递归函数将GotFocus事件的委托添加到表单中的每个控件,并根据控件类型启用/禁用每个按钮。
答案 4 :(得分:0)
您可以在复制/粘贴按钮中检查OnClick事件中的Form.ActiveControl属性。
您可以在Tag字段中放置一个可以检查的标记,或者您可以检查它是TextBox还是您正在做的任何事情。
这将允许您在选择了错误的控件时使按钮不执行任何操作。如果你想要实际禁用按钮,你可以在Form的MouseDown / KeyPress事件中进行相同的检查,或者为每个控件设置GotFocus / LostFocus的事件处理程序。
如果您需要的检查是控件是TextBox还是类似的东西,并且您有很多控件而且您不想手动设置每个控件的处理程序,您可以在foreach中添加处理程序FormLoad事件中的Form.Controls。
答案 5 :(得分:0)
创建一个接口IControlMyForm
添加名为DisableCutCopyPaste
的方法添加一个名为EnableCutCopyPaste
的方法让表单实现接口。
创建UI_Controller类
创建IControlMyForm类型的属性
为剪切复制粘贴按钮
创建禁用和启用方法在启动时创建UI_Controller的实例
启动时,Form将自己设置为属性。
使用各种控件的OnFocus事件(或Click等)可以调用UI_Controller类的正确方法。
如果你所做的只是启用和禁用剪切复制和粘贴,这是过度的。但是如果你的表单很复杂,那么你最好定义一个接口并在UI_Controller类中放置一些更复杂的交互(无论它们是什么)。这样你就可以清楚地看到做了什么。还可以更轻松地重构表单。
如果您认为这样过度,那么只需创建一个EnableCutCopyPaste例程和DisableCutCopyPaste例程,并将调用放在OnFocus事件中(或点击等)。