-1

我是使用自定义控件的新手。

我在继承了 ultragrid 的 winform 应用程序中创建了一个自定义控件。我不能在这里粘贴我的代码,但我会在下面解释:

  1. 我在命令之前设置了一些属性,例如OnPaint 方法,CellClickAction这些属性改变了超网格的外观和行为。HeaderClickActionbase.OnPaint(pe);

  2. 我添加了一个 ContextMenuStrip 控件,其中包含 3 个项目(升序、降序、无),应该在 Mouse Up 事件中使用。

  3. 我已经为 ultragrid 的 Mouse Up 事件编写了一个事件处理程序,它应该找到单击标题的标题(如果用户单击标题)并通过检查进行 3way 排序,然后更改该单击列的 SortIndicator 属性(如果鼠标左键单击按钮)或在该列上显示 ContextMenuStrip(如果单击鼠标右键)。

  4. 我为 ContextMenuStrip 的 Item Clicked 事件编写了一个事件处理程序,它根据单击的项目对网格进行排序。

现在的问题是,当我想在表单中使用我的网格时。每件事情都做的很慢,有时 Visual Studio 会被锁定,或者例如,如果我MessageBox.Show("");在其单击的事件处理程序上使用命令向表单添加一个按钮,然后运行,然后单击此按钮表单锁定。

谁能告诉我我的错误是什么?请随时问我我的问题。

4

2 回答 2

2

您可以尝试在表单“锁定”时暂停调试,然后向上调用堆栈以了解我锁定代码的位置(或者可能执行无限循环或类似的操作)

但是,对于这种个性化,您还可以创建一个带有 ultragrid 实例的“配置器”类,然后添加所有处理程序,因此您的所有个性化代码都保留在这个“配置器”类中。
如果您需要大量个性化,也许自定义控件是值得的……但如果个性化只是一些事件处理程序,则将所有代码保留在特定类中可能更容易管理。

创建自定义控件需要很多专业知识,并且总是伴随着许多怪癖和不常见的问题......您需要定义所有属性默认值,定义其他属性属性以获得适当的设计时支持,承受视觉上的怪异studio IDE,它崩溃了......

于 2012-12-19T08:30:26.307 回答
0

Akh joooon,谢谢大家。我发现问题出在哪里......它在OnPaint事件中。但不是在 CellClickAction 或 HeaderClickAction 中,它在外观属性、ActiveRowAppearance 和 SelectedRowAppearance 中。因为我也设置了它们。我评论了它们,现在一切都很好。

于 2012-12-19T09:49:00.110 回答