我是使用自定义控件的新手。
我在winform应用程序中创建了一个继承了ultragrid的自定义控件。我不能在这里粘贴我的代码,但我在下面解释:
我在CellClickAction
命令之前在OnPaint方法中设置了一些属性,例如HeaderClickAction
和base.OnPaint(pe);
,这些属性改变了超网格的外观和行为。
我添加了一个ContextMenuStrip控件,其中包含应在Mouse Up事件中使用的3个项目(升序,降序,无)。
我为ultragrid的Mouse Up事件编写了一个事件处理程序,它应该找到clicked标题的标题(如果用户点击了标题)并通过check进行3way排序,然后更改单击的SortIndicator属性列(如果单击鼠标左键)或在该列上显示ContextMenuStrip(如果单击鼠标右键)。
我为ContextMenuStrip的Item Clicked事件编写了一个事件处理程序,它根据点击的项目对网格进行排序。
现在的问题是当我想在一个表单中使用我的网格时。每个事情都在缓慢进行,有时视觉工作室会变得锁定,或者例如我在其点击事件上使用MessageBox.Show("");
命令向表单添加一个按钮处理程序然后运行,并单击此按钮以锁定表单。
谁能告诉我我的错误是什么?请随时向我询问我的问题。
答案 0 :(得分:2)
您可以尝试在表单“锁定”时暂停调试,并向上调用堆栈以了解我锁定的代码(或者可能执行无限循环或类似的操作)
但是,对于这种个性化,您还可以创建一个“配置器”类,它接受一个ultragrid实例,然后添加所有处理程序,因此所有个性化代码都保留在这个“配置器”类中。
如果你需要大量的个性化,也许自定义控件是值得的......但如果个性化只是一些事件处理程序,那么保持特定类中的所有代码可能更容易管理。
创建自定义控件需要大量的专业知识,并且总是带来许多怪癖和不常见的问题......您需要定义所有属性的默认值,定义其他属性属性以获得适当的设计时间支持,能够承受视觉工作室IDE的奇怪之处,它崩溃......
答案 1 :(得分:0)
Akh joooon,谢谢大家。我发现问题出在哪里......那是在 OnPaint 事件中。但不是在CellClickAction或HeaderClickAction中,它出现在外观属性,ActiveRowAppearance和SelectedRowAppearance中。因为我也设置了它们。我评论了它们,现在一切都很好。