-1

カスタム コントロールの使用は初めてです。

ウルトラグリッドを継承した winform アプリケーションでカスタム コントロールを作成しました。ここにコードを貼り付けることはできませんが、以下で説明します。

  1. ウルトラグリッドの外観と動作を変更するコマンドの前に、OnPaint メソッドでCellClickActionやなどのプロパティをいくつか設定しました。HeaderClickActionbase.OnPaint(pe);

  2. Mouse Up イベントで使用する必要がある 3 つの項目 (Ascending、Descending、None) を持つ ContextMenuStrip コントロールを追加しました。

  3. クリックされたヘッダーのキャプションを検索し (ユーザーがヘッダーをクリックした場合)、チェックによる 3 通りの並べ替えを実行し、クリックされた列の SortIndicator プロパティを変更する (左マウスの場合) ウルトラグリッドの Mouse Up イベントのイベント ハンドラーを作成しました。ボタンがクリックされた場合) またはその列に ContextMenuStrip が表示されます (マウスの右ボタンがクリックされた場合)。

  4. クリックされた項目に基づいてグリッドを並べ替える ContextMenuStrip の Item Clicked イベントのイベント ハンドラーを作成しました。

今問題は、フォームでグリッドを使用したいときです。すべての動作が遅く、時にはビジュアルスタジオがロックされるか、たとえば、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 に答える