解决方案 »
- winfrom combobox能绑定多个tag值吗?我要每个combobox的value有个tab值
- 如何把文件的数据读出来存放在数组里
- 向C#高手请教文本自动滚动问题,急
- c#实现游戏后台挂机的功能是不是都用sendmessage或者postmessage
- 求助:获取网站上的指定信息
- 如何去掉 DataGridView 中文本框的默认系统菜单
- BindingSource 添加问题
- 正则表达式语法问题
- XML文档的字符串问题
- 我想把oracle数据库中的a表的内容插入到b表中的一个字段里,该字段类型为xmltype,怎么用c#语言实现??(高手门多多帮忙)
- 自己用C#写的服务意外终止
- 十六进制字符串显示问题 方便查看每个字节
那应该怎么删除button控件?还有,单击中等后单击简单不是clear了么? 为什么在panel控件中依然显示button
没有任何变量引用这个控件,GC会负责将它们回收不过看楼主的代码,使用了Button[] MyButton数组,那么即使执行了clear,数组依然在引用控件,所以不会销毁.
而panel大小又设置为自适应控件
所以只能越变越大,不会缩回去
要么循环之前代码修改下panel的大小
谢谢!这个问题解决了! 怪不得会没有变化。
能否再请教一个问题,能否用代码控制winform的宽度以及高度?应该如何写? 百度了一天就是没有找到
static void Main(string[] args)
{
Panel childPanel = new Panel();
childPanel.Size = new Size(100, 100);
childPanel.BorderStyle = BorderStyle.FixedSingle;
childPanel.Dock = DockStyle.Fill; Form win = new Form();
win.StartPosition = FormStartPosition.CenterScreen;
win.TopMost = true;
//如果去掉下面一句,那么宽度就会自动变得宽一些
win.FormBorderStyle = FormBorderStyle.None;
Panel Parent = new Panel();
Parent.Dock = DockStyle.Fill;
Parent.BackColor = Color.Blue; Panel other = new Panel();
other.Dock = DockStyle.Bottom;
other.BackColor = Color.Gray;
other.Size = new Size(200, 200); win.Controls.Add(Parent);
win.Controls.Add(other);
Parent.BringToFront(); int WindowsClientWidth = childPanel.Size.Width;
int WindowsClientHeight = childPanel.Size.Height;
win.ClientSize = new Size(WindowsClientWidth, WindowsClientHeight + other.Size.Height); win.Controls[0].Controls.Add(childPanel);
childPanel.BackColor = Color.Red; win.Show();
string message = "childPanel:\t\t宽为{0},高为{1}\r\n" +
"textbox:\t\t\t宽为{6},高为{7}\r\n" +
"客户区:\t\t\t宽为{4},高为{5} \r\n" +
"Windows:\t\t宽为{2},高为{3}\r\n"; MessageBox.Show(win, string.Format(message, childPanel.Size.Width, childPanel.Size.Height,
win.Size.Width, win.Size.Height,
win.ClientSize.Width, win.ClientSize.Height,
other.Size.Width,other.Size.Height));
}
给你一段代码,你建一个console程序,引用System.Windows.Forms和System.Drawing
然后run起来,你就知道了
销毁button的问题,如果每次new一个button,不放进数组,直接放进panel,clear的时候就会销毁
不过对于你的应用,是很不方便的,你需要用数组来计算点击的按钮相邻的8个按钮里的状态,如果没有数组,你就很难在panel里找到正确的相邻的button
其实你完全没必要为销毁button烦恼
虽然clear之后不会立即销毁
但是你重新new过,重新给数组赋值之后,之前的button就不再有任何引用,GC会赋值销毁,而不会越来越多导致内存溢出的
这样你内存里最多就只有数组长度个botton而已
或者你从中级变成初级的时候,前N个赋值为bottn,后面的循环赋值为null,GC有空就会把它销毁了
panel1.Width = 300;
panel1.Height = 300;
你这里不就是给panel设置大小了吗
不过我怎么记得高度和宽度不能直接赋值,必须赋值panel.size才行呢
是不是赋值了null并且没有引用的情况下,button就会给销毁?
比如Botton B=new Botton();
如果B是局部变量,那么函数执行完,new的这个Botton就没有引用了(当前前提是你没有把他add进panel里)
如果B是全局变量,那么即使函数执行完,B依然在保持Botton的强引用
设置B=null,就是将B指向一个空引用,此时就不再有任何变量引用Botton,GC会在适当的时候将它回收掉(当然也不会立即回收)
比如Botton B=new Botton();
如果B是局部变量,那么函数执行完,new的这个Botton就没有引用了(当前前提是你没有把他add进panel里)
如果B是全局变量,那么即使函数执行完,B依然在保持Botton的强引用
设置B=null,就是将B指向一个空引用,此时就不再有任何变量引用Botton,GC会在适当的时候将它回收掉(当然也不会立即回收)懂了个大概
那么之前new出来的Botton就会被销毁,B会保持对后new出来的Botton的强引用
你从panel继承了一个自定义控件,然后把代码写在了这个类里?那当然是找不到窗体对象了.
虽然用parent属性可能能直接在控件的代码里改窗体大小,不过还是建议把代码放到窗体类中去.
不要老想在窗体的外部类里操作窗体的属性啊