treeview的问题:

finer 2003-07-21 11:37:24
请问各位,怎样用treeview的节点打开一个winform,那语句怎样写?谢谢!

我用的是:
if(treeView1.Nodes[0].IsSelected){
Form2 form=new Form2();
form.Show();
}
.....
但是这个有两个问题:
1、我点击打开它然后关闭,马上去点击想再打开它,Form2就不会出来了,一定要点击Nodes[1]或其它的node才能再次打开;
2、我点击打开它,然后点击其它node再去点击Nodes[0],它又会打开一个Form2,如此重复会打开很多个Form2
怎样才能避免以上情况呢?

还有你们又是怎样做的呢?

谢谢!
...全文
10 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liduke 2003-07-21
  • 打赏
  • 举报
回复
对,还是在Click事件中处理比较好了
CMIC 2003-07-21
  • 打赏
  • 举报
回复
同意楼上的,在Click 事件中处理
private void treeView1_Click(object sender, System.EventArgs e)
{
if(treeView1.SelectedNode.Text=="显示from的Node")
{
Form2 form=new Form2();
form.Show();

}
}
AhBian 2003-07-21
  • 打赏
  • 举报
回复
估计你是在 AfterSelect 事件中调用的吧。AfterSelct 事件在改变 Select 后的才发生,点击已选节点,不会引发此事件。

在 MouseUp 或者 Click 事件中处理,比较妥当。(不要在 MouseDown 事件,因为你要弹出窗口。)

用 GetNodeAt 方法依据鼠标位置可以获取节点,可以在此判断此节点是否被选,然后再作处理。处理之前要调用 this.treeView1.PointToClient 转换成正确的 Client Point,因为如果使用 Screen Point 作为参数调用 GetNodeAt 可能一无所获。
brightheroes 2003-07-21
  • 打赏
  • 举报
回复
然后,建议你用Sytem.Windows.Forms.UserControl
brightheroes 2003-07-21
  • 打赏
  • 举报
回复
然后,建议你用Sytem.Windows.Forms.UserControl
AhBian 2003-07-21
  • 打赏
  • 举报
回复
首先,你是在什么事件中执行此代码的,我不知道,不能正确回答。

第二个问题,只要在主窗口中保存一个 Form2 form 变量。
然后,稍稍改一下代码:
if(treeView1.Nodes[0].IsSelected){
if (form == null || form.IsDisposed)
form = new Form2();
form.Show();
}
Azitec 2003-07-21
  • 打赏
  • 举报
回复
你把form声明放在外面,不然每次生成一个新对象,肯定回出一堆form啊
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2003-07-21 11:37
社区公告

让您成为最强悍的C#开发者