MDI窗体的问题,在CSDN一个多月了没人能解决,再解决不了我就没饭吃了,好惨啊。。。
MDI窗体的左边有一个树形,然后MDI有很多子窗体,我希望移动的子窗体能浮在树形的上方,而不是默认的子窗体会被树形盖住。
客户要求一定要这么做,没办法,今天等到天亮也要等,明天早上要验收这一块了。
大家请帮帮忙。
问题点数:40、回复次数:44Top
1 楼copico(北北)回复于 2006-05-27 18:15:34 得分 5
兄弟,同情你,真的帮不了你,我唯一能帮你的就是帮你顶Top
2 楼boblaile(爱在13月32)回复于 2006-05-27 18:32:34 得分 2
兄弟,我帮你baidu了一下
后来有google 了一下
................
Top
3 楼amandag(高歌)回复于 2006-05-27 18:39:06 得分 1
关注,帮顶Top
4 楼kssys()回复于 2006-05-27 18:44:55 得分 1
换条灵活的:树形会自动隐藏~Top
5 楼zhqs1000(子鱼)回复于 2006-05-27 18:51:53 得分 1
顶到解决为止Top
6 楼chcky(成浩)回复于 2006-05-27 19:03:11 得分 0
谢谢各位热心的兄弟们,我向你们致敬了!
有办法可以解决吗,能实现这样的效果也行,再搞不出来,就真的要死得很难看了!
Top
7 楼copico(北北)回复于 2006-05-27 20:11:54 得分 0
没事,兄弟,帮你搞定了
一会告诉你Top
8 楼amandag(高歌)回复于 2006-05-27 20:17:55 得分 0
o,不知道楼上怎么解决的Top
9 楼chcky(成浩)回复于 2006-05-27 20:47:41 得分 0
非常感谢copico(一路向北)兄弟
他得到的效果跟我想要的还是有点差距,继续求解!
我的QQ:38676160
MSN:chengkaiyu2008@hotmail.com
Top
10 楼laidon(走进.NET,开创新生活)回复于 2006-05-27 20:51:22 得分 3
我怎么看不大懂楼主的意思啊?"浮在树形的上方"是什么意思?树形又指的是什么?Top
11 楼chcky(成浩)回复于 2006-05-27 21:17:43 得分 0
树形就是treeview,浮在树形的上方就是treeview不要盖住子窗体。Top
12 楼jbczj(人见人爱)回复于 2006-05-27 21:22:13 得分 2
上面放个panel,然后上面放树Top
13 楼laidon(走进.NET,开创新生活)回复于 2006-05-27 21:23:11 得分 0
通过判断子窗体和treeview的位置关系处理不了吗Top
14 楼chcky(成浩)回复于 2006-05-27 21:46:27 得分 0
上面放个panel,然后上面放树
这样不行的
通过判断子窗体和treeview的位置关系处理不了吗
这个我真的不知道怎么弄了,请教!Top
15 楼pslh(pslh)回复于 2006-05-28 01:25:07 得分 2
估计不可能做到,
System.Windows.Forms.MdiClient和你所说的树形同属mdi窗体中的控件,子窗体又在System.Windows.Forms.MdiClient中,要么树形盖住子窗体,要么树形完全不可见。
不过你可以在这两种状态之间来回切换,但那样太不美了。Top
16 楼chcky(成浩)回复于 2006-05-28 01:39:26 得分 0
怎么,还没人来帮我解决吗?
版主呢?Top
17 楼pslh(pslh)回复于 2006-05-28 01:47:50 得分 0
没办法的,除非你能把“树形”放到System.Windows.Forms.MdiClient中去!Top
18 楼chcky(成浩)回复于 2006-05-28 01:52:27 得分 0
没办法的,除非你能把“树形”放到System.Windows.Forms.MdiClient中去!
你所说的是放在MDI窗体客户区吗?
可以放在那里啊,但有什么用呢Top
19 楼pslh(pslh)回复于 2006-05-28 02:04:34 得分 1
System.Windows.Forms.MdiClient中只能添加子窗体的!
不过也不是绝对没办法,可以用非常规的办法把control添加到System.Windows.Forms.MdiClient中去。记得有一次,在vb.net2003中,我就把一个control添加到菜单中去了,可惜时间长了,忘记了,但好象与NativeWindow有关。Top
20 楼chcky(成浩)回复于 2006-05-28 03:16:04 得分 0
继续等,一直等到天亮!Top
21 楼chcky(成浩)回复于 2006-05-28 06:16:41 得分 0
自己顶!Top
22 楼sunhui(TangramTeamLeader)回复于 2006-05-28 07:41:30 得分 6
你在北京吗?如果在北京,你可以与我联系,可以解决你的问题Top
23 楼sunhui(TangramTeamLeader)回复于 2006-05-28 07:43:18 得分 0
我的联系方式:sunhuizlz@hotmail.com,通过msn即可Top
24 楼nnhy(大石头http://www.nnhy.org QQ群10193406)回复于 2006-05-28 09:12:42 得分 1
哈哈,变一个做法试试,激活的一个子窗体移动到TreeView附近的时候,让TreeView暂时消失,移走了MDI再显示出来Top
25 楼dadi0189(冰雨)回复于 2006-05-28 10:32:47 得分 1
这样的窗体如果在VB中很容易实现,在.NET原理也应差不多吧,都是微软的东西.
如果要参考VB代码,把你的邮箱号以短信息形式发给我.Top
26 楼chcky(成浩)回复于 2006-05-28 10:44:35 得分 0
谢谢各位,感动得流泪了,谢谢你们!Top
27 楼ZJQ100()回复于 2006-05-28 10:46:59 得分 1
好像不如VB的灵活Top
28 楼lyjun_311(心中有剑)回复于 2006-05-28 11:15:34 得分 1
haha没有用过Top
29 楼laidon(走进.NET,开创新生活)回复于 2006-05-28 11:42:49 得分 0
关注楼主
试了好多方法都不行,如果实在不行楼主可以考虑用个不是子窗体的form啊,自己控制一下窗体不让它到mdi窗体的外面,再加上点其它处理,应该很像子窗体的
不然就判断窗体和treeview的位置关系,让窗体移动不到treeview所在位置Top
30 楼chcky(成浩)回复于 2006-05-28 11:53:02 得分 0
关注楼主
试了好多方法都不行,如果实在不行楼主可以考虑用个不是子窗体的form啊,自己控制一下窗体不让它到mdi窗体的外面,再加上点其它处理,应该很像子窗体的
不然就判断窗体和treeview的位置关系,让窗体移动不到treeview所在位置
因为子窗体比较多,这样很难控制,况且作出来也肯定不美观Top
31 楼shak_lp(侠客)回复于 2006-05-28 13:15:51 得分 1
帮顶Top
32 楼byst()回复于 2006-05-28 15:08:07 得分 1
没有思路
帮你顶吧
等我有了想法再告诉你
或者你有了想法再开贴告诉大家Top
33 楼liumj2001(蛊惑罗密欧)回复于 2006-05-28 15:37:19 得分 1
我我记得我是在个PICTURE BOX放控件的,可以做到这种效果。Top
34 楼ggw128()回复于 2006-05-28 16:57:30 得分 1
有個辦法,把treeview控件放在一個特殊的子窗體,而這個特殊窗體是不能被關閉的,在打開別的子窗體時這個特殊的窗體就自然地處於最底層,也可以通過一個命令把它叫出來。我的ERP系統就是這樣處理的。
我的MSN是ggw128@hotmail.com QQ是69896811Top
35 楼Eddie005(♂) №.零零伍 (♂)回复于 2006-05-28 20:50:01 得分 1
to lz:
so sorry~~ 你的message现在才看到~
大概已经解决了吧? 没有遇到过类似的需求,如果有人已经解决了,偶就不试了~Top
36 楼sgfgh(靛青の羽)回复于 2006-05-28 22:04:51 得分 4
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsApplication18
{
public class Form6 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;
System.Windows.Forms.TreeView tv;
Form7 f ;
bool b;
public Form6()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(512, 410);
this.IsMdiContainer = true;
this.Name = "Form6";
this.Text = "Form6";
this.Resize += new System.EventHandler(this.Form6_Resize);
this.Load += new System.EventHandler(this.Form6_Load);
}
private void Form6_Load(object sender, System.EventArgs e)
{
f = new Form7();
f.Location = new Point(0,0);
f.Width = 150;
f.Height = this.Height-35;
f.MdiParent = this;
f.Show();
Form7 ff = new Form7();
ff.FormBorderStyle = FormBorderStyle.Sizable;
ff.treeView1.Visible = false;
ff.MdiParent = this;
ff.Show();
ff.Resize +=new EventHandler(ff_Resize);
}
private void Form6_Resize(object sender, System.EventArgs e)
{
f.Height = this.Height-35;
}
private void ff_Resize(object sender, EventArgs e)
{
if(((Form7)sender).WindowState == FormWindowState.Maximized && b == false)
{
b= true;
this.tv = f.treeView1;
tv.Dock = DockStyle.Left;
tv.Width = 150;
tv.Height = this.Height-35;
this.Controls.Add(tv);
}
else if(b==true)
{
f.treeView1 = tv;
f.Controls.Add(f.treeView1);
f.treeView1.Dock = DockStyle.Fill;
tv=null;
b=false;
}
}
}
public class Form7 : System.Windows.Forms.Form
{
public System.Windows.Forms.TreeView treeView1;
private System.ComponentModel.Container components = null;
public Form7()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.SuspendLayout();
this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(0, 0);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(292, 270);
this.treeView1.TabIndex = 0;
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 270);
this.Controls.Add(this.treeView1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Form7";
this.Text = "Form7";
this.ResumeLayout(false);
}
}
}
Top
37 楼sgfgh(靛青の羽)回复于 2006-05-28 22:11:25 得分 0
糟糕
上面把Main给忘了,
加个吧
namespace WindowsApplication18
{
class class1
{
static void Main()
{
Application.Run(new Form6());
}
}
}Top
38 楼sgfgh(靛青の羽)回复于 2006-05-28 23:13:34 得分 0
之前的还有点小bug ,又改了一点儿
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsApplication18
{
public class Form6 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;
System.Windows.Forms.TreeView tv;
Form7 f ;
bool b;
public Form6()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
static void Main()
{
Application.Run(new Form6());
}
private void InitializeComponent()
{
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(512, 410);
this.IsMdiContainer = true;
this.Name = "Form6";
this.Text = "Form6";
this.Resize += new System.EventHandler(this.Form6_Resize);
this.Load += new System.EventHandler(this.Form6_Load);
}
private void Form6_Load(object sender, System.EventArgs e)
{
f = new Form7();
f.Location = new Point(0,0);
f.Width = 150;
f.Height = this.Height-35;
f.MdiParent = this;
f.Show();
Form7 ff = new Form7();
ff.FormBorderStyle = FormBorderStyle.Sizable;
ff.treeView1.Visible = false;
ff.MdiParent = this;
ff.Show();
ff.Resize +=new EventHandler(ff_Resize);
ff.WindowState = FormWindowState.Maximized;
ff.WindowState = FormWindowState.Normal;
}
private void Form6_Resize(object sender, System.EventArgs e)
{
f.Height = this.Height-35;
}
private void ff_Resize(object sender, EventArgs e)
{
if(((Form7)sender).WindowState == FormWindowState.Maximized && b == false)
{
b= true;
this.tv = f.treeView1;
tv.Dock = DockStyle.Left;
tv.Width = 150;
tv.Height = this.Height-35;
this.Controls.Add(tv);
}
else if(b==true && ((Form7)sender).WindowState != FormWindowState.Maximized )
{
f.treeView1 = tv;
f.Controls.Add(f.treeView1);
f.treeView1.Dock = DockStyle.Fill;
tv=null;
b=false;
}
}
}
public class Form7 : System.Windows.Forms.Form
{
public System.Windows.Forms.TreeView treeView1;
private System.ComponentModel.Container components = null;
public Form7()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.SuspendLayout();
this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(0, 0);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(292, 270);
this.treeView1.TabIndex = 0;
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 270);
this.Controls.Add(this.treeView1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Form7";
this.Text = "Form7";
this.ResumeLayout(false);
}
}
}
Top
39 楼pslh(pslh)回复于 2006-05-28 23:48:00 得分 0
总不能要求每个子窗体都带上一个TreeView吧Top
40 楼sgfgh(靛青の羽)回复于 2006-05-29 00:00:07 得分 1
当然不用阿Top
41 楼wzpwork(东方红叶)回复于 2006-05-29 00:29:59 得分 1
兄弟,同情你,帮你顶。Top
42 楼jdsbjcailei(基度山伯爵)回复于 2006-05-29 08:08:00 得分 1
哈哈,变一个做法试试,激活的一个子窗体移动到TreeView附近的时候,让TreeView暂时消失,移走了MDI再显示出来
这个笨方法不行吗?Top
43 楼chcky(成浩)回复于 2006-05-29 10:51:23 得分 0
我是楼主,非常感谢各位热情的兄弟!真的谢谢你们!
特别感谢copico(一路向北),你帮我试了很多方法,虽然最终没能完全得到我想要的,但我特别的感谢,你的热情,你的真诚,使我深受感动。
特别感谢sgfgh(靛青の羽),因为我的问题已经解决了,也就没试你的方法
更特别感谢sunhui(MFC.NET),是你完全解决了我的心头之患,更因为你的热情和助人为乐的精神,使我感觉到CSDN的温暖!
关于如何实现此功能,sunhui(MFC.NET)孙辉将不久会在他的blog里公布,大家注意在CSDN主页上关注他的blog!
再次感谢你们,所有为我付出的兄弟们!Top
44 楼kristen(肥头大肚)回复于 2007-01-06 15:48:45 得分 0
加一工具按钮或菜单,能进行显示/隐藏切换Top




