0

WinFormsアプリケーションを作成しています。いくつかのステータス(有効/無効など)を表すラベルがたくさんあります。それぞれのステータスを異なる色(緑、灰色...)にします。これを達成するために私が知っている唯一の方法は、label.Textが必要なステータスに一致するかどうかを確認してから、そのForeColorを変更することです。ただし、アプリケーションでステータスラベルを設定するたびにこのチェックを実行する必要があるため、これは難しい方法です。

「一箇所で」それを行う方法はあるのだろうか。たとえば、特定の文字列のすべてのラベルをチェックし、Form_Load()から呼び出すメソッドを作成します。

4

4 に答える 4

3

Labelクラスから継承する独自のカスタムラベルクラスを作成できます。このようなもの:

public class MyLabel : Label
{
    public MyLabel()
    {
        if(this.Text == "something")
        {
            this.ForeColor = Color.Green;
        }
    }

    protected override void OnTextChanged(EventArgs e)
    {
        if(this.Text == "something")
        {
            this.ForeColor = Color.Green;
        }
    }
}

したがって、Labelを使用する代わりに、どこでもMyLabelを使用します。

于 2012-05-02T20:55:42.030 に答える
1

Form_Load()のリストにすべてのラベルを追加すると、.Where(l => l.Text == "探している文字列")を実行できます。それらを繰り返して、フォアカラーを適切に設定します

于 2012-05-02T20:54:05.387 に答える
0

フォームコントロールとその子コントロールを使用してフォーム上のすべてのラベルを列挙します。たとえば、このSO回答のGetAllメソッドを使用します。

特定のタイプ(ボタン/テキストボックス)のWindowsフォームフォームのすべての子コントロールを取得するにはどうすればよいですか?

そして、次のような適切な色を設定します。

var allLabels = GetAll(form, typeof(Label)); /// you can use this as first param if in form methods
foreach(Label oneLabel in allLabels)
{
  if (oneLabel.Text == "Something")
  {
    // set color or whatever
  }
}
于 2012-05-02T20:58:21.693 に答える
0

ラベルコントロールのTagプロパティを利用することもできます。ステータスの表示に使用しているすべてのラベルコントロールのタグを「ステータス」に設定し、Page_Loadイベントで、ループを回転してForeColorを設定します。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For Each control In Me.Controls
        If (TypeOf (control) Is Label) Then
            Dim statusLabel As Label
            statusLabel = control
            If (statusLabel.Tag = "Status") Then
                statusLabel.ForeColor = Color.Red
            End If
        End If
    Next
End Sub
于 2012-05-02T20:59:30.657 に答える