0

寻找免费的拼写检查解决方案,我认为我这样做很聪明,但我想不是。

我已经创建了一个基于 Windows 表单的应用程序,并且我希望表单将用户指定数量的用户控件(带有文本框)添加到面板上。然后用户可以单击某个按钮,此面板上的控件将被清除并添加新控件。用户做某事并重复该过程。现在,我希望这些文本框支持拼写检查,并到处寻找免费的解决方案。

WPF 文本框支持拼写检查,而常规 win 表单中的文本框不支持。我想我可以通过将这些 WPF 文本框添加到 ElementHost 对象来使用它们,该对象又位于面板中。该面板将是一个用户控件。

因此,在我的应用程序中,我将能够将这些用户控件的实例添加到表单中,并利用 .NET 的拼写检查优势。这实际上有效,但是在使用该应用程序一段时间后,发现该应用程序最终会由于内存不足错误而冻结在我身上。我已经确定了这些 WPF 控件的内存错误,因为普通文本框不会发生此问题。

当窗口打开并指定控件的数量时,这几乎就是添加控件的方式:

Dim xOffset As Integer = 0
For i As Integer = 0 To theNumber
    Dim myUserControl As New SpecialUserControl()
    myPanel.Controls.Add(myUserControl)
    myUserControl.Location = New Point(7, 7)
    myUserControl.Location = New Point(xOffset, 7)
    xOffset = xOffset + 207
Next

注意:

  • myPanel 是表单上的面板
  • SpecialUserControl 是带有 WPF 文本框的用户控件(在 ElementHost 对象中)

当用户按下按钮时,面板被清除:

myUserControl.Controls.Clear()

然后用户可以重复该过程。

当我试图找到解决方案时,互联网上有很多结果,我认为我遇到的问题是由于 WPF 控件即使在清除面板后也不会消失。根据这个结论,我尝试了不同的解决方案来处理这些控件或将它们设置为空,但内存问题不断发生。如果有人可以在这里给我一些建议或想法,我将非常感激。

4

1 回答 1

0

我认为这可能只是因为这些用户控件的创建速度比收集它们的速度要快。我已经更改了程序,以便在不需要时不会创建任何这些特殊的用户控件。该程序适用于更易于管理的 WPF 控件数量。

于 2010-03-19T20:51:06.537 回答