2017-01-16 22 views
0

私は、従業員が(この例では)EMPで始まるバッジでサインインできる機能をwinformsアプリケーションに追加したいと考えています。私は最大4人の従業員のために4つのラベルを持っています。以下のコードでは、従業員1(ラベル1)がサインアウトしてから従業員4がサインアウトしようとすると、従業員4は従業員1の職場を順番に記入します。私はこれらのif文をすべて使用せずにこれを行う簡単な方法があると確信しています。誰かが私を正しい方向に向けることができますか?既に存在する場合、ラベルテキストを削除します

if (EmployeeOneLabel.Text == "" && ScanEntryTextBox.Text.Contains(EmployeePrefix)) 
    { 
     EmployeeOneLabel.Text = ScanEntryTextBox.Text; 
     EmployeeOneSaved = EmployeeOneLabel.Text; 
     ScanEntryTextBox.Text = ""; 
    } else if(ScanEntryTextBox.Text == EmployeeOneSaved) 
    { 
     EmployeeOneLabel.Text = ""; 
     ScanEntryTextBox.Text = ""; 
    } 
    if (EmployeeTwoLabel.Text == "" && ScanEntryTextBox.Text.Contains(EmployeePrefix)) 
    { 
     EmployeeTwoLabel.Text = ScanEntryTextBox.Text; 
     EmployeeTwoSaved = EmployeeTwoLabel.Text; 
     ScanEntryTextBox.Text = ""; 
    } else if (ScanEntryTextBox.Text == EmployeeTwoSaved) 
    { 
     EmployeeTwoLabel.Text = ""; 
     ScanEntryTextBox.Text = ""; 
    } 
    if (EmployeeThreeLabel.Text == "" && ScanEntryTextBox.Text.Contains(EmployeePrefix)) 
    { 
     EmployeeThreeLabel.Text = ScanEntryTextBox.Text; 
     EmployeeThreeSaved = EmployeeThreeLabel.Text; 
     ScanEntryTextBox.Text = ""; 
    } else if (ScanEntryTextBox.Text == EmployeeThreeSaved) 
    { 
     EmployeeThreeLabel.Text = ""; 
     ScanEntryTextBox.Text = ""; 
    } 
    if (EmployeeFourLabel.Text == "" && ScanEntryTextBox.Text.Contains(EmployeePrefix)) 
    { 
     EmployeeFourLabel.Text = ScanEntryTextBox.Text; 
     EmployeeFourSaved = EmployeeFourLabel.Text; 
     ScanEntryTextBox.Text = ""; 
    } else if (ScanEntryTextBox.Text == EmployeeFourSaved) 
    { 
     EmployeeFourLabel.Text = ""; 
     ScanEntryTextBox.Text = ""; 
    } 

@PaulFの提案に基づいた新しい更新コード。文字列のリストを使用する方法について

private string EmployeePrefix = "EMP"; 
List<string> listEmployee = new List<string>(); 
public TimeTrack() 
{ 
    InitializeComponent(); 
} 
private void EnterButton_Click(object sender, EventArgs e) 
{ 
    Label[] LabelEmployee = { EmployeeOneLabel, EmployeeTwoLabel, EmployeeThreeLabel, EmployeeFourLabel }; 
    if (ScanEntryTextBox.Text.Contains(EmployeePrefix)) 
    { 
     if (listEmployee.Contains(ScanEntryTextBox.Text)) 
     { 
      listEmployee.Remove(ScanEntryTextBox.Text); 
      ScanEntryTextBox.Text = ""; 
     } else 
     { 
      listEmployee.Add(ScanEntryTextBox.Text); 
      ScanEntryTextBox.Text = ""; 
     } 
     for (int i = 0; i < LabelEmployee.Length; i++) 
     { 
      LabelEmployee[i].Text = listEmployee.ElementAtOrDefault(i) ?? ""; 
      ScanEntryTextBox.Text = ""; 
     } 
    } 
} 

Moving label text up

答えて

2

方法。

有効な従業員のバッジを取得した場合、リスト内にあるかどうかを確認します(&)。それ以外の場合はリストの末尾に追加します。

次に、新しいリストの内容でラベルを更新します。以下のような

何か:あなたはおそらくラベルの更新のためのループのラベル&使用aの配列を作成することができ

List<string> listEmployee = new List<string>(); 

... 
... 

if (ScanEntryTextBox.Text.Contains(EmployeePrefix) && (listEmployee.Count < 4)) 
{ 
    if (listEmployee.Contains(ScanEntryTextBox.Text)) 
    listEmployee.Remove(ScanEntryTextBox.Text); 
    else 
    listEmployee.Add(ScanEntryTextBox.Text); 
    EmployeeOneLabel.Text = listEmployee.ElementAtOrDefault(0) ?? ""; 
    EmployeeTwoLabel.Text = listEmployee.ElementAtOrDefault(1) ?? ""; 
    EmployeeThreeLabel.Text = listEmployee.ElementAtOrDefault(2) ?? ""; 
    EmployeeFourLabel.Text = listEmployee.ElementAtOrDefault(3) ?? ""; 
} 

Label [] labelEmployee = {EmployeeOneLabel, EmployeeTwoLabel, EmployeeThreeLabel, EmployeeFourLabel}; 
List<string> listEmployee = new List<string>(); 

... 
... 

if (ScanEntryTextBox.Text.Contains(EmployeePrefix) && (listEmployee.Count < labelEmployee.Length)) 
{ 
    if (listEmployee.Contains(ScanEntryTextBox.Text)) 
    listEmployee.Remove(ScanEntryTextBox.Text); 
    else 
    listEmployee.Add(ScanEntryTextBox.Text); 
    for (int i = 0; i < labelEmployee.Length; i++) 
    labelEmployee[i].Text = listEmployee.ElementAtOrDefault(i) ?? ""; 
} 
+0

これはあなたが行った提案と一緒に動作していますが、ラベルを削除するとラベルが上に移動しています。それはその場所にラベルを残すために離れていますか?メインの投稿にGIFをアップロードしました。 4個のラベルがすべていっぱいになった場合(削除を開始するために)実行されないため、> count <4を削除しました。 – Parakoopa

+0

さて、あなたは私の意図的な間違いを見つけました(私はそれを逃した) - 追加する前にelseに4制限の制限を加えることができます。あなたの元の質問を読んでいる方法私はあなたがサインインされた従業員が以前のサインアウトした場合に移動することを望んだと思っていました - そうでない場合は、ラベルの配列だけです - 従業員がサインインしたら、ラベルがサインインされているかどうかを確認し、そうであれば配列をクリアします。 (あなたがサインインしているかどうかを調べるために最初のブランクラベルの位置を保存することで最適化することができます) – PaulF

関連する問題