C#可伸缩的窗体 在button的click事件中写,改变当前窗体的size即可,也就是说右边本来就有,只不过没显示 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样动态改变size大小是固定的,同时要保证左右两边内容能拖动啊,就像放置了一个splitcontainer在里面一样 点击button强制改变窗体大小! 如果只是单单改变窗体的大小是缺少了我上面所说的,同时左边右边的内容大小是可以拖动的。这样不符合要求!应该是用splitContainer实现的 楼主,你在Button.Click里写这样一句代码试试:this.Width = this.Width + 500; private void Form1_Load(object sender, EventArgs e) { this.Width = 300; this.splitContainer1.SplitterDistance = 288; } private void button1_Click(object sender, EventArgs e) { if (this.Width == 300) { this.Width = 500; this.splitContainer1.SplitterDistance = 288; } else { this.Width = 300; this.splitContainer1.SplitterDistance = 288; } } 隐藏右边内容时将控件放在一个Panal里面,显示右边内容时,将控件放在SplitContainer的左右两边,然后控制是显示Panal还是显示SplitContainer,再调整窗体大小就可以了吧 这样动态改变size大小是固定的,同时要保证左右两边内容能拖动啊,就像放置了一个splitcontainer在里面一样窗体的SIZE如果固定了,那也只是在运行时固定了,但是你在运行时动态通过代码改变SIZE是可以的。 这有什么难的,就是按了按钮,设置窗口的Width。if ((sender as Button).Text == ">>"){ this.Width += 200; (sender as Button).Text = "<<";}else{ this.Width -= 200; (sender as Button).Text = ">>";} 这个简单呀,控件放在splitContainer里,点击按钮后改变窗体宽即可 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } Panel panelBottom=new Panel(); Panel panelLeft=new Panel(); Panel panelRight=new Panel(); Button button=new Button(); Splitter splitter = new Splitter(); private Boolean isShow = true; private int dw = 0; private void Form1_Load(object sender, EventArgs e) { panelBottom.Height = 30; panelBottom.Dock = DockStyle.Bottom; button.Dock = DockStyle.Right; button.Click += new EventHandler(button_Click); panelBottom.Controls.Add(button); this.Controls.Add(panelBottom); panelLeft.BorderStyle = BorderStyle.Fixed3D; panelRight.BorderStyle = BorderStyle.Fixed3D; this.panelLeft.Dock = DockStyle.Fill; this.splitter.Dock = DockStyle.Right; this.panelRight.Dock = DockStyle.Right; this.Controls.Add(panelLeft); button_Click(null, null); dw = this.Width - this.panelLeft.Width; } void button_Click(object sender, EventArgs e) { if (isShow) { button.Text = "show>>"; int w = panelLeft.Width; this.Controls.Remove(splitter); this.Controls.Remove(panelRight); this.Width = w + dw; } else { button.Text = "hide<<"; this.Width = this.Width + panelRight.Width + splitter.Width; this.Controls.Add(splitter); this.Controls.Add(panelRight); } isShow = !isShow; } }} 上面这段代码应该能够满足你的要求。你把代码直接粘贴到你新建工程的窗口中就可以。所有组件都是用语句动态创建的。这里面的要点是:show/hide所要调整的宽度应当动态地测量出来,而不是写死。使用布局(Dock属性)组织左侧面板、分割条和右侧面板。窗口的宽度包括了边框。内部的宽度是客户区的宽度。你当然可以用API函数直接读出这个宽度。当你不想用API函数的时候,直接测量一下内部Dock为Fill的控件与窗口的宽度之差就可以了。代码里是dw。上面的代码由个小缺陷:第一次显示的时候,窗口的大小不是原始的PanelLeft加上两个边框的大小(就是PanelLeft.width),而显示完成后,PanelLeft的宽度比其初始值小2个窗口边框的宽度。如果你用API的方式测量窗口边框宽度当然就不会遇到这个问题。不过这并不影响什么,因为以布局方式构建的界面不需要一个特别精确的初始化大小。况且接下来的操作不会出现这个问题。 兄弟这么多人就你认真读了我的问题,不过我已经用splitcontainer实现了,你这个因为窗体外面有个control所以里面的控件不是从(0,0)开始排布的吧。结了~ 编译后pdb文件图标的问题? C#多线程问题,感兴趣的朋友来,在线求解。 当前页面怎么调用其它aspx页面 用C#刷网页流量的问题!在线请教!!! Winform点击主窗体关闭,但是进程仍然存在于任务管理器中 获得进程cpu使用率 一個很簡單的保存問題,但煩了我好長時間了(來者有分呀). 如何实现画流程图 如何将DataGrid显示出来的最底下的那一行空行去掉? 超高的高手请看:win98不装IE5.01或自己的安装程序来安装必须的部分.不知道是否可行? 关于winform搜索窗体子控件的问题 怎么用数据集在datagridview中显示查询结果
应该是用splitContainer实现的
this.Width = this.Width + 500;
{
this.Width = 300;
this.splitContainer1.SplitterDistance = 288;
} private void button1_Click(object sender, EventArgs e)
{
if (this.Width == 300)
{
this.Width = 500;
this.splitContainer1.SplitterDistance = 288;
}
else
{
this.Width = 300;
this.splitContainer1.SplitterDistance = 288;
}
}
if ((sender as Button).Text == ">>")
{
this.Width += 200;
(sender as Button).Text = "<<";
}
else
{
this.Width -= 200;
(sender as Button).Text = ">>";
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Panel panelBottom=new Panel();
Panel panelLeft=new Panel();
Panel panelRight=new Panel();
Button button=new Button();
Splitter splitter = new Splitter();
private Boolean isShow = true;
private int dw = 0;
private void Form1_Load(object sender, EventArgs e)
{
panelBottom.Height = 30;
panelBottom.Dock = DockStyle.Bottom;
button.Dock = DockStyle.Right;
button.Click += new EventHandler(button_Click);
panelBottom.Controls.Add(button);
this.Controls.Add(panelBottom);
panelLeft.BorderStyle = BorderStyle.Fixed3D;
panelRight.BorderStyle = BorderStyle.Fixed3D;
this.panelLeft.Dock = DockStyle.Fill;
this.splitter.Dock = DockStyle.Right;
this.panelRight.Dock = DockStyle.Right;
this.Controls.Add(panelLeft);
button_Click(null, null);
dw = this.Width - this.panelLeft.Width;
} void button_Click(object sender, EventArgs e)
{
if (isShow)
{
button.Text = "show>>";
int w = panelLeft.Width;
this.Controls.Remove(splitter);
this.Controls.Remove(panelRight);
this.Width = w + dw;
}
else
{
button.Text = "hide<<";
this.Width = this.Width + panelRight.Width + splitter.Width;
this.Controls.Add(splitter);
this.Controls.Add(panelRight);
}
isShow = !isShow;
}
}
}
你把代码直接粘贴到你新建工程的窗口中就可以。所有组件都是用语句动态创建的。这里面的要点是:
show/hide所要调整的宽度应当动态地测量出来,而不是写死。
使用布局(Dock属性)组织左侧面板、分割条和右侧面板。
窗口的宽度包括了边框。内部的宽度是客户区的宽度。你当然可以用API函数直接读出这个宽度。当你不想用API函数的时候,直接测量一下内部Dock为Fill的控件与窗口的宽度之差就可以了。代码里是dw。
上面的代码由个小缺陷:第一次显示的时候,窗口的大小不是原始的PanelLeft加上两个边框的大小(就是PanelLeft.width),而显示完成后,PanelLeft的宽度比其初始值小2个窗口边框的宽度。如果你用API的方式测量窗口边框宽度当然就不会遇到这个问题。不过这并不影响什么,因为以布局方式构建的界面不需要一个特别精确的初始化大小。况且接下来的操作不会出现这个问题。
结了~