Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C Windows窗体日期时间选择器,如何获取SelectedText、SelectionStart和SelectionLength?_C#_Winforms_Datetimepicker_Textselection - Fatal编程技术网

C# C Windows窗体日期时间选择器,如何获取SelectedText、SelectionStart和SelectionLength?

C# C Windows窗体日期时间选择器,如何获取SelectedText、SelectionStart和SelectionLength?,c#,winforms,datetimepicker,textselection,C#,Winforms,Datetimepicker,Textselection,.NET DateTimePicker有文本,但我不知道如何获取和设置DateTimePicker的SelectionStart、SelectionLength和SelectionText属性 例如,如何以编程方式选择日期11/17/2001中的2天数字? 如何以编程方式确定当前选择的开始位置 基本上,我想做的是类似于以下代码的事情: //选择一天的文本 TextBoxmyDateTimePicker.SelectionStart=3; TextBoxmyDateTimePicker.Selec

.NET DateTimePicker有文本,但我不知道如何获取和设置DateTimePicker的SelectionStart、SelectionLength和SelectionText属性

例如,如何以编程方式选择日期11/17/2001中的2天数字? 如何以编程方式确定当前选择的开始位置

基本上,我想做的是类似于以下代码的事情:

//选择一天的文本 TextBoxmyDateTimePicker.SelectionStart=3; TextBoxmyDateTimePicker.SelectionLength=2; //获取文本的起始位置 返回TextBoxmyDateTimePicker.SelectionStart;
下面的代码是我问题的答案。它是从问题的答案中推导出来的

public event System.EventHandler父\u值已更改; 公共枚举日期部分 { 年 月 白天 } [Browsablefalse] [DesignerSerializationVisibility DesignerSerializationVisibility.Hidden] public DatePart SelectedPart{get;set;} private DateTime m_PreviousValue=TimeTools.UnixBaseTime; private bool m_CheckSelectedPart=false; public void DateTimeField_GotFocusobject发送方,EventArgs e { m_PreviousValue=此.Value; m_CheckSelectedPart=true; SendKeys.SendWait{UP}; SendKeys.SendWait{DOWN}; m_CheckSelectedPart=false; } public void DateTimeField_previewkeydown对象发送方,previewkeydown事件参数e { 开关e.KeyCode { 大小写键。空格: e、 IsInputKey=true; 打破 案例键。选项卡: m_PreviousValue=此.Value; m_CheckSelectedPart=true; SendKeys.SendWait{UP}; SendKeys.SendWait{DOWN}; m_CheckSelectedPart=false; //将e.IsInputKey设置为false以允许Windows使用该选项卡 //转到TabStop=true的上一个或下一个组件 如果Control.ModifierKeys&Keys.Shift==Keys.Shift { //false=向左或向上退出 e、 IsInputKey=!SelectedPart==DatePart.MONTH; } 其他的 { //false=向右或向下退出 e、 IsInputKey=!SelectedPart==DatePart.YEAR; } 打破 默认:中断; } } public void datetime字段\u keydown对象发送方,KeyEventArgs e { //通过前进到格式的下一部分来模拟Delphi的DateTimePicker行为 //使用空格或制表符 如果e.KeyCode.equalskies.Space | | e.KeyCode.equalskies.Tab { 如果Control.ModifierKeys&Keys.Shift==Keys.Shift { SendKeys.Send{left}; } 其他的 { SendKeys.Send{right}; } } } 私有无效日期字段\u值更改对象发送方,事件参数e { 如果m_checked selectedpart&&sender是日期时间选择器dtp { TimeSpan change=dtp.Value-m_PreviousValue; var dayChange=Math.Abschange.Days; 如果dayChange==1 { SelectedPart=DatePart.DAY; } 否则,如果日变化>=365 { SelectedPart=DatePart.YEAR; } 其他的 { SelectedPart=DatePart.MONTH; } m_PreviousValue=dtp.值; } //父级的ValueChanged事件处理程序 父值已更改?.Invokesender,e; }
在DTP中调用SendKeys.Send{Right}。输入事件选择下一部分。@JQSOFT读懂了我的心思。实际上这是我的最终目标。当按下空格键时,我执行您描述的步进部分。我希望该选项卡也适用于步进。不幸的是,该选项卡随后卡在文本框中。我想知道SelectionStart何时位于最后或第一部分,以便设置PreviewKeyDown的e.IsInputKey=false;对于年中的Tab和月中的Shift Tab,用户可以通过DTP部件进行Tab并继续。我还希望能够在从DTP左侧的外部控件输入DTP时选择DTP的月份;或者在从DTP右侧的外部控件输入DTP时选择DTP的年份。好把戏。@JQSOFT的好把戏对我有用。