gpt4 book ai didi

c# - DateTimePicker 获取焦点字段

转载 作者:行者123 更新时间:2023-12-05 02:20:37 32 4
gpt4 key购买 nike

我正在尝试确定在 DateTimePicker (WinForms) 应用程序中选择(突出显示)了哪个控件(天、月、年)。是否有一个属性指示选择了哪个控件?如果是这样,我能否以编程方式仅更改另一个控件的控件值?

有没有办法获得 DateTimePicker 的焦点控制?

最佳答案

简短的回答:不,不容易。

DateTimePicker 基本上是 SysDateTimePick32 的包装器,并且不会公开任何易于使用的属性来确定在 ShowUpDown 设置为 true 时选择了哪个子窗口。它在其使用的源代码中甚至没有私有(private)成员 - 它基本上只是将内容转发到底层 com 控件,ala UnsafeNativeMethods.SendMessage

一种方法是发送 up 然后发送 down 并检查哪个部分发生了变化。这是一个示例。创建一个新的 winforms 应用程序,然后添加 DateTimePicker、Label 和 Button。之后,在 using 语句之后将下面的代码复制到您的 form1.cs 中:

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public enum DatePart
{
YEAR,
MONTH,
DAY
}

public DatePart part { get; set; }
private DateTime previous { get; set; }
private bool checkSelectedPart { get; set; }


public Form1()
{
InitializeComponent();


dateTimePicker1.ValueChanged += DateTimePicker1_ValueChanged;
dateTimePicker1.KeyPress += DateTimePicker1_KeyPress;
previous = dateTimePicker1.Value;

}

private void DateTimePicker1_KeyPress(object sender, KeyPressEventArgs e)
{

}

private void DateTimePicker1_ValueChanged(object sender, EventArgs e)
{
if (checkSelectedPart)
{
var dtp = sender as DateTimePicker;
TimeSpan change = (dtp.Value - previous);
var dayChange = Math.Abs(change.Days);
if (dayChange == 1)
part = DatePart.DAY;
else if (dayChange >= 365)
part = DatePart.YEAR;
else
part = DatePart.MONTH;

previous = dtp.Value;

label1.Text = part.ToString();
}
}

private void button1_Click(object sender, EventArgs e)
{
checkSelectedPart = true;
dateTimePicker1.Focus();
SendKeys.SendWait("{UP}");
SendKeys.SendWait("{DOWN}");
checkSelectedPart = false;
button1.Focus();
}
}
}

关于c# - DateTimePicker 获取焦点字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384514/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com