作成日: 2022/02/14 最終更新日: 2022/02/14
文書種別
使用方法
詳細
C1Buttonには、2重クリックを防止するための組み込みの機能は用意されておりません。
そのため、このままでは、現在のクリックイベントの処理中に他のクリック動作を抑制することができません。
これを抑止するための代替策として、C1ButtonのClickイベントにて、クリックイベントハンドラの開始時にC1Buttonを無効にし、目的の処理を実行し終えてから、再度C1Buttonを有効にする方法が考えられます。
以下に、C1Buttonをクリックした時にプログレスバーを表示し、100%になるまでは次のClickイベントを受け付けないようにするコードを記載します。
そのため、このままでは、現在のクリックイベントの処理中に他のクリック動作を抑制することができません。
これを抑止するための代替策として、C1ButtonのClickイベントにて、クリックイベントハンドラの開始時にC1Buttonを無効にし、目的の処理を実行し終えてから、再度C1Buttonを有効にする方法が考えられます。
以下に、C1Buttonをクリックした時にプログレスバーを表示し、100%になるまでは次のClickイベントを受け付けないようにするコードを記載します。
Private Sub C1Button1_Click(sender As Object, e As EventArgs) Handles C1Button1.Click
'C1Buttonを無効にする
C1Button1.Enabled = False
'処理を実行する
DoProcess
Application.DoEvents()
'処理が完了したら、C1Buttonを有効にする
If Not C1Button1.IsDisposed Then
C1Button1.Enabled = True
End If
End Sub
Private Sub DoProcess()
label1.Text = ""
progressBar1.Maximum = 100
Dim i As Integer = 0
For i = 0 To 99
Console.WriteLine(i.ToString)
System.Threading.Thread.Sleep(5)
progressBar1.Value = i
Next
progressBar1.Maximum = (progressBar1.Maximum - 1)
label1.Text = "処理が完了しました"
End Sub
◎サンプルコード(C#)
private void c1Button1_Click(object sender, EventArgs e)
{
//C1Buttonを無効にする
c1Button1.Enabled = false;
//処理を実行する
DoProcess();
Application.DoEvents();
//処理が完了したら、C1Buttonを有効にする
if (!c1Button1.IsDisposed) c1Button1.Enabled = true;
}
private void DoProcess() {
label1.Text = "";
progressBar1.Maximum = 100;
for (int i = 0; i < 100; i++)
{
Console.WriteLine(i.ToString());
System.Threading.Thread.Sleep(5);
progressBar1.Value = i;
}
progressBar1.Maximum--;
label1.Text = "処理が完了しました";
}