![](/img/trans.png)
[英]How can I enable/disable command in Visual Studio 2017 VSIX C# project
[英]How Can I Enable and Disable Time by The time in C#
在我的 Windows forms 中,我想按時間示例禁用和啟用按鈕:下午 4:00 按鈕將被禁用。
這是我的代碼:
labelTime.Text = DateTime.Now.ToShortTimeString(); // this will be the time
timer1.Start();
switch (DateTime.Now.ToShortTimeString())
{
case "4:51 AM":
OutBtn.Enabled = true;
break;
default:
OutBtn.Enabled = false;
break;
}
這是您可以做到的一種方法:
// In constructor of form.
Timer timer = new Timer();
timer.Tick += timer_Tick;
DateTime now = DateTime.Now;
DateTime disableTime = new DateTime(now.Year, now.Month, now.Day, 4, 51, 0);
if(disableTime > now)
timer.Interval = (int)(disableTime - now).TotalMilliseconds;
timer.Start();
Timer_Tick
是這樣的:
private void timer_Tick(object sender, EventArgs e)
{
yourButton.Enabled = false;
(sender as Timer).Stop();
}
正如 Brett Caswell 在下面的評論中提到的,上面的代碼不會“啟用和禁用”按鈕。
下面是一個根據指定的enableTime
和disableTime
啟用/禁用按鈕的示例(我正在禁用/啟用BtnExit
)。
DateTime enableTime = new DateTime(1, 1, 1, 4, 51, 0);
DateTime disableTime = new DateTime(1, 1, 1, 16, 0, 0);
public FrmMain()
{
InitializeComponent();
Timer timer = new Timer();
DateTime now = DateTime.Now;
bool isNowEnableTime = enableTime.TimeOfDay < now.TimeOfDay && now.TimeOfDay < disableTime.TimeOfDay;
if (isNowEnableTime)
{
setIntervalForNextDisableTime(timer);
timer.Tick += disableButton;
}
else
{
setIntervalForNextEnableTime(timer);
timer.Tick += enableButton;
}
timer.Start();
}
private void disableButton(object sender, EventArgs e)
{
BtnExit.Enabled = false;
var timer = sender as Timer;
timer.Stop();
timer.Tick -= disableButton;
timer.Tick += enableButton;
setIntervalForNextEnableTime(timer);
timer.Start();
}
private void enableButton(object sender, EventArgs e)
{
BtnExit.Enabled = true;
var timer = sender as Timer;
timer.Stop();
timer.Tick -= enableButton;
timer.Tick += disableButton;
setIntervalForNextDisableTime(timer);
timer.Start();
}
private void setIntervalForNextDisableTime(Timer timer) =>
timer.Interval = (int)(getNextOccurranceOfTime(disableTime) - DateTime.Now).TotalMilliseconds;
private void setIntervalForNextEnableTime(Timer timer) =>
timer.Interval = (int)(getNextOccurranceOfTime(enableTime) - DateTime.Now).TotalMilliseconds;
/// <summary>
/// Get the next occurrance of <paramref name="dateTime"/> relative to now.
/// </summary>
private DateTime getNextOccurranceOfTime(DateTime dateTime) => getNextOccurranceOfTime(dateTime, DateTime.Now);
private DateTime getNextOccurranceOfTime(DateTime dateTime, DateTime relativeTo)
{
if(relativeTo.TimeOfDay > dateTime.TimeOfDay) /// dateTime was in past. Next occurrance is going to be tommorrow.
{
var tomorrow = relativeTo.AddDays(1);
return new DateTime(tomorrow.Year, tomorrow.Month, tomorrow.Day, dateTime.Hour, dateTime.Minute, dateTime.Second);
}
/// dateTime hasn't come yet, it's going to be today.
return new DateTime(relativeTo.Year, relativeTo.Month, relativeTo.Day, dateTime.Hour, dateTime.Minute, dateTime.Second);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.