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 = "";
}
}
}
これはあなたが行った提案と一緒に動作していますが、ラベルを削除するとラベルが上に移動しています。それはその場所にラベルを残すために離れていますか?メインの投稿にGIFをアップロードしました。 4個のラベルがすべていっぱいになった場合(削除を開始するために)実行されないため、> count <4を削除しました。 – Parakoopa
さて、あなたは私の意図的な間違いを見つけました(私はそれを逃した) - 追加する前にelseに4制限の制限を加えることができます。あなたの元の質問を読んでいる方法私はあなたがサインインされた従業員が以前のサインアウトした場合に移動することを望んだと思っていました - そうでない場合は、ラベルの配列だけです - 従業員がサインインしたら、ラベルがサインインされているかどうかを確認し、そうであれば配列をクリアします。 (あなたがサインインしているかどうかを調べるために最初のブランクラベルの位置を保存することで最適化することができます) – PaulF