2011-05-29 126 views
0

在Windows窗体控件(如listview和treeview)中,当某人编辑某个项目的标签时,然后按下“Escape”键,编辑结束但节点无论我写在里面什么都会留下。我想换取当我按Escape键时标签返回到原来的状态。我知道我必须在标签编辑之前,在“BeforeLabelEdit”事件中精确编辑标签。在“KeyPress”事件处理程序中,我不知道如何停止标签版本。我怎样才能做到这一点?如何取消标签使用退出键编辑并将标签返回到它是什么

更新

我发现,我认为不存在的方法,但现在的问题是其他。在版本标签操作过程中,Escape按键看起来似乎是难以理解的。

private void ObjectWithItems_KeyDown(object sender, KeyEventArgs e) 
{ 
     if (e.KeyCode == Keys.Escape) 
     { 
      if (treeViewDocXml.SelectedNode != null) 
      { 
       treeViewDocXml.SelectedNode.EndEdit(true); 
      } 
     } 
} 
+2

默认情况下,它已经以这种方式工作,在编辑节点时按Escape可恢复旧文本。对于TreeView和ListView都是如此。我不得不猜测你在事件处理程序中搞砸了。不能说,你忘了粘贴一个代码片段。 – 2011-05-29 14:49:45

+0

嗨@Hans也许我的尝试重现了我没有成功的问题。我甚至在编辑标签事件之前和之后删除了与事件处理程序的关联,令我惊讶的是不良行为依然存在。你知道一种在版本动作中获得按键的方法吗?找到一种方法来解决我的问题 – mjsr 2011-05-29 16:19:08

+0

@Hans问题的另一个症状是当我按Escape键时它释放控制的焦点。可能是嵌入控件的问题的根源?....该控件嵌入在作为VSPackage扩展的一部分的ToolWindow中。在这种情况下,重点离开toolwindow并返回到IDE。这与标签版本的正常取消完全不同,该标签版本保持焦点以及通常以自由形式看到的编辑项目的选择。 – mjsr 2011-05-30 12:48:58

回答

1

好吧,我'不知道你在说什么,但是我这里是如何取消文本框编辑和设置文本编辑开始前:

string textBefore; 
private void textBox1_Enter(object sender, EventArgs e) 
{ 
    textBefore = textBox1.Text; 
} 

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if(e.KeyChar == (char)Keys.Escape) 
     textBox1.Text = textBefore; 
} 

希望它能帮助。

+0

嗨@Reniuz,情况不同。寻找在项目中有标签的控件,例如我在问题中提到的两个标签。对于这些控件,问题是我怎样才能停止标签版本?,按键参数不提供任何方法或属性来做到这一点,或者至少我直到现在才看到它们。默认情况下,“Escape”键这样做,它会停止版本,但我不想修改取消操作的结果。 – mjsr 2011-05-29 14:15:15

+0

@voodoomsr:我怀疑WinForms事件模型提供了任何可以取消的事件来编辑标签(使用CancelEventArgs),就像ASP.NET做 – abatishchev 2011-05-29 14:24:17

+0

@voodoomsr:为什么你不能使用KeyPress事件/ Keys.Escape代码? – abatishchev 2011-05-29 14:27:18