亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當 CheckBox 未選中時,使其無法在特定時間 C#

當 CheckBox 未選中時,使其無法在特定時間 C#

C#
汪汪一只貓 2022-07-23 17:49:21
我正在開發防病毒程序和實時保護面板上我想要復選框,例如未選中“惡意軟件保護”復選框以使其在 15 分鐘內無法啟用,然后再次啟用它以防止垃圾郵件。如果有人可以幫助我,那就太好了我嘗試過,Thread.Sleep()但它會停止整個應用程序,我嘗試過使用計時器,但我認為我做錯了。這是計時器的代碼private void checkBox1_CheckStateChanged(object sender, EventArgs e){    if (this.checkBox1.Checked)    {        this.checkBox1.Text = "On";        // these two pictureboxes are for "You are (not) protected"        // picture        picturebox1.Show();        pictureBox5.Hide();        timer1.Stop();    }    else    {        this.checkBox1.Text = "Off";        // this is the problem        timer1.Start();        this.checkBox1.Enabled = true;        pictureBox1.Hide();        pictureBox5.Show();    }}private void timer1_Tick(object sender, EventArgs e){    this.checkBox1.Enabled = false;}
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

簡答


從您發布的代碼來看,您實際上只需要更改代碼以禁用事件中的復選框并在CheckChanged事件中啟用它timer1_Tick(以及事件Stop中的計時器Tick)。


完整答案


Winforms 有一個Timer可以用于此的控件。將 aTimer放到設計器上后,將Interval屬性設置為啟用復選框之前要等待的毫秒數(1秒是1000毫秒,所以 15 分鐘是15min * 60sec/min * 1000ms/sec,或900,000ms)。然后雙擊它以創建Tick事件處理程序(或在您的事件中添加一個,Form_Load如下所示)。


接下來,CheckChanged如果未選中該復選框,則禁用該復選框并啟動計時器。


然后,在Tick事件中,只需啟用復選框(請記住,此事件在經過毫秒后觸發Interval)并停止計時器。


例如:


private void Form1_Load(object sender, EventArgs e)

{

    // These could also be done in through designer & property window instead

    timer1.Tick += timer1_Tick; // Hook up the Tick event

    timer1.Interval = (int) TimeSpan.FromMinutes(15).TotalMilliseconds; // Set the Interval

}


private void timer1_Tick(object sender, EventArgs e)

{

    // When the Interval amount of time has elapsed, enable the checkbox and stop the timer

    checkBox1.Enabled = true;

    timer1.Stop();

}


private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

    if (!checkBox1.Checked)

    {

        // When the checkbox is unchecked, disable it and start the timer

        checkBox1.Enabled = false;

        timer1.Start();

    }

}


查看完整回答
反對 回復 2022-07-23
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

這可以在不Timer顯式使用的情況下完成。而是使用異步Task.Delay,這將簡化代碼并使其易于理解實際/領域意圖。


// Create extension method for better readability

public class ControlExtensions

{

    public static Task DisableForSeconds(int seconds)

    {

        control.Enabled = false;

        await Task.Delay(seconds * 1000);

        control.Enabled = true;

    }

}


private void checkBox1_CheckStateChanged(object sender, EventArgs e)

{

    var checkbox = (CheckBox)sender;

    if (checkbox.Checked)

    {

        checkbox.Text = "On";

        picturebox1.Show();

        pictureBox5.Hide();

    }

    else

    {

        checkbox.Text = "Off";

        checkbox.DisableForSeconds(15 * 60);

        pictureBox1.Hide();

        pictureBox5.Show();

    }

}


查看完整回答
反對 回復 2022-07-23
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

你應該使用Timer.SynchronizationObject



查看完整回答
反對 回復 2022-07-23
  • 3 回答
  • 0 關注
  • 170 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號