关于dockPanel控件的一些问题

gdfg34324 2010-04-10 10:42:42
我使用了dockPanel1控件,但是我现在想实现点击tree其中的一个节点,如何在右侧显示自己要想要的串口

...全文
340 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ConanKid 2010-04-10
  • 打赏
  • 举报
回复
DockPanel是指:WeifenLuo.WinFormsUI.Docking.dll里的那个吗?如果是,请继续看:
1。首先你要在主窗体右侧显示的窗体要继承DockContent
2。还有一点让我费解,你这个treeview2是在哪个窗体上?
Form2 form2 = new Form2();
mainform mainform = new mainform();//这里为什么又重新创建?
form2.Show(mainform.dockPanel1);//主窗体还没显示出来form2又如何显示?
form2.ShowHint = DockState.Document;
现在对你的具体情况不清楚。
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
求在DockPanel 的子窗体用命令打开另一子窗体使其停靠在主窗体的方法

谁能帮我实现啊
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
难道没有人帮我解决吗?
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
是啊,就是楼上的意思
为什么这样不行
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.Name.ToString() == "节点5")
{
Form2 form2 = new Form2();
mainform mainform = new mainform();
form2.Show(mainform.dockPanel1);
form2.ShowHint = DockState.Document;
}
}
libinlink 2010-04-10
  • 打赏
  • 举报
回复

你是开发CS架构的程序吧?
你最好把dockPanel控件的功能封装到用户控件里。
再单击左侧树节点的时候,根据不同节点显示不同的用户控件。
这样做可以减少主窗体的代码量。
维护起来会相对容易很多。
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
是啊,具体呢,理论上是这样的
smartls 2010-04-10
  • 打赏
  • 举报
回复
这个方法应该很多吧,例如你在创建TreeView时候就可以对TreeNode的Tag赋值,用于标记不同的窗体引用,然后用TreeView的Click事件就可以做到了。
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
不是串口,是窗口
ConanKid 2010-04-10
  • 打赏
  • 举报
回复
mainform mainfrm = (mainform)this.owner;//这里的this应该会指向treeview所在的窗体,如果确实是这样,还不行的话,那么在treeview所在窗体显示前显式设置该窗体的Owner=mainform

这个你没做。如果真的不行。QQ:66970551
我现在就写个示例给你看一下。
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
你可以不用按照我的意思修改,我的可能本来思路就不对
你有什么好方法可以实现吗?
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
mainform mainfrm = (mainform)this.owner出问题了,owner没有定义
ConanKid 2010-04-10
  • 打赏
  • 举报
回复
按我后面说的那样做还是不行?
gdfg34324 2010-04-10
  • 打赏
  • 举报
回复
谢谢楼上的,我还是在说明一下我的意思
三个form,mainform ,form1,form2
其中mainform中这样写,然后from1能显示,form1的位置是在dockPanel1的左侧
public void mainform_Load(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.Show(dockPanel1);
}
然后我点击form1中的treeView1的一个节点,form2显示在dockPanel1的中间,就是这样
ConanKid 2010-04-10
  • 打赏
  • 举报
回复
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.Name.ToString() == "节点5")
{
Form2 form2 = new Form2();
mainform mainform = new mainform();
form2.Show(mainform.dockPanel1);
form2.ShowHint = DockState.Document;
}
}
改成
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.Name.ToString() == "节点5")
{
Form2 form2 = new Form2();
mainform mainfrm = (mainform)this.owner;//这里的this应该会指向treeview所在的窗体,如果确实是这样,还不行的话,那么在treeview所在窗体显示前显式设置该窗体的Owner=mainform
form2.Show(mainfrm.dockPanel1);
form2.ShowHint = DockState.Document;
}
}
ConanKid 2010-04-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gdfg34324 的回复:]
求在DockPanel 的子窗体用命令打开另一子窗体使其停靠在主窗体的方法

谁能帮我实现啊
[/Quote]

你的主要问题出现在 mainform mainform = new mainform();//这里为什么又重新创建?
这里是不能重新new一个的,不然你的子窗体会显示到你刚new的这个主窗体上,而我想你的整个应用程序来说主窗体应该只有一个,第一个子窗体也是通过主窗体打开的,所以你在第一个子窗体上想使另一个子窗体显示到同一个主窗体上的时候,你必须先拿到主窗体,你可以通过单例模式或是之前先保存主窗体引用。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧