ListBox
で1つのアイテムのみを無効にすることはできますか?アイテムの矩形を取得する方法はないようです(コントロール内のすべてのピクセル/少なくとも1つの列の各ピクセルについてIndexFromPoint
を呼び出す以外に、特定のアイテムが表示されている場合でも)。ListBox内の1つのアイテムのみを無効にします
これはC#WinForms(WPFではなく)用です。私がやろうとしていますかについて
詳細情報:
私はそれで多くの項目でListBox
を持っている、と私は、「ボタン」のセットは赤など、あなたが上にマウスを移動アイテム(上に表示したいです削除のためのX)。 10個以上のアイテムを持つリストを除いて、これは素晴らしいことですが、新しいアイテムの上にカーソルを置くたびに、コントロール全体が無効になるので、表示された再描画が行われます。データは変更されず、ディスプレイだけが変更されます。
編集:私はすでにListBox
をサブクラス化し、ListBox
のOnDrawItem
ので、保護された方法で私の描画を行う詳細情報および以前の試み
を使用することができます。
さまざまなレベルで以下のことを試しました。変数this
は、延長されたListBox
であり、index
は、引き出されるアイテムであり、old_index
は、先に描かれたアイテムである。
// Causes flicker of entire list, but works
this.Invalidate();
// Causes flicker of selected item, but works
int sel_index = this.SelectedIndex;
this.SelectedIndex = old_index;
this.SelectedIndex = index;
this.SelectedIndex = sel_index;
// Does not work
if (old_index >= 0)
this.RefreshItem(old_index);
if (index >= 0)
this.RefreshItem(index);
お返事ありがとう、これは私のちらちらのリストボックスで私を助けました。私も使った:this.SetStyle(ControlStyles.OptimizedDoubleBuffer、true);ちらつきを減らすのにも役立ちます。 – ChandlerPelhams