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は、(ElementHostオブジェクト内の)WPFテキストボックスを使用するユーザーコントロールです。

ユーザーがボタンを押すと、パネルはクリアされます。

myUserControl.Controls.Clear()

その後、ユーザーはプロセスを繰り返すことができます。

解決策を見つけようとしたところ、インターネット上で多くの結果が出ており、パネルをクリアしてもWPFコントロールが消えないことが問題だと思っています。この結論に続いて、私はこれらのコントロールを破棄するか、メモリの問題が発生し続ける以外に何も設定しないことに関して、さまざまな解決策を試しました。ここで誰かがアドバイスやアイデアをくれたら、本当にありがたいです。

4

1 に答える 1

0

これは、これらのユーザー コントロールが収集されるよりも速く作成されていることが原因である可能性があると判断しました。これらの特別なユーザー コントロールが不要な場合は作成しないように、プログラムを変更しました。プログラムは、より管理しやすい数の WPF コントロールで正常に動作します。

于 2010-03-19T20:51:06.537 に答える