コンピュータのリストをテキストファイルからリストボックスに追加しようとしています。コンピュータ上でpingが成功するかどうかに基づいて、成功すると緑色に、失敗すると赤色に色付けする必要があります。問題は、すべてのアイテムの最後のコンピュータの最後の色を使用することです。これは、forループが完了するまでDrawitemイベントが発生しないためだと思いますが、これを回避する方法は考えられません。どんな助けもありがとうございます。あなたがListView
コントロールを使用してに開放している場合は(pingのための縮小コード)リストボックスアイテムを特定のテキストカラーで追加するには?
private logitem linez;
struct logitem
{
public string text;
public Brush color;
};
private void browsebutton_Click(object sender, EventArgs e)
{
string textfile = ofd.FileName;
if (textfile != "")
{
string[] lines = System.IO.File.ReadAllLines(@textfile);
foreach (string line in lines)
{
if (line != "")
{
string liner;
liner = line.Replace(" ", "");
if (ping successfull)
{
listBoxAddGreen();
}
else (ping fails)
{
listBoxAddRed();
}
}
changeCount();
}
}
public void listBoxAddGreen()
{
linez.color = Brushes.Green;
listBox1.Items.Add(linez.text);
}
public void listBoxAddRed()
{
linez.color = Brushes.Red;
listBox1.Items.Add(linez.text);
}
private void listBox1_DrawItem(object sender,
System.Windows.Forms.DrawItemEventArgs e)
{
e.DrawBackground();
Brush myBrush = linez.color;
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(),
e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
あなたは 'ListView'を使用していますか?色を変更するのは簡単です。 –
描画モードを 'OwnerDrawnFixed'に設定しましたか? –
あなたは** MVVMに精通していなければなりません。それを使用して、あなたの仕事は数分間解決されます。 1)ビューモデルでpingを実行する。 2)すべてのpingされたアイテムは、pingが成功したかどうかを示す 'PingOk'プロパティを持つビューモデル(例えば、' ItemVM')を持つべきです。 3) 'ListBox'の' ItemsSource'を 'ItemVM'のコレクションにバインドします。 4) 'PingOk'プロパティの値に応じて、' ListBoxItem'が 'Foreground'を変更するためのXAMLのトリガーを設定します。そして 'ListBox'は' ListView'よりもはるかにあなたの仕事に便利ですので、この項目のコントロールに固執してください。 – Maxim