高分急求解VB程序运行问题:当电脑的分辨率发生改变时,我写的程序里的Text和Label控件就不能显示出来
发布网友
发布时间:2022-05-13 16:58
我来回答
共3个回答
热心网友
时间:2023-10-17 02:27
这是个很普遍的问题,传统的软件是用API来改变系统分辨率去自适应软件,一部分游戏就这么做,DerictX9以上就开始设置游戏环境了.以前我们玩C++开发的单机游戏会在开始的时候屏闪一下,系统分辨率用API暂时篡改了,当程序无响应的时候,分辨率就改变不回来了,经常性地调用API改变分辨率会使系统出现故障,这就是为什么很多人玩单机游戏造成系统崩溃的原因.而且调用API系统会很卡,程序在运行API一直开着.窗口和显示一直以来是很关注的问题.VB有很大的局限性,所有的控件你必须做初始化处理啊.把控件名称作为变量,控件作为类的成员.写成一个自适应类,然后在窗口的Realize事件中加入类,给控件或者控件组自适应窗口大小,这样就不叫改变分辨率了,就上一自适应大小,有一个Realize事件来完成,当窗口发生任何形状变化的时候控件都会自适应变化.
举例:先定义窗体加载的时候长宽为常量.
Controls(控件名).Width=控件名.原始宽*窗体.Width窗体原始宽
下面是我写的一段C#代码,方法你可以采用一下:
const int chang = 1000;
const int kuan = 600;
private void AddControl<T>(string n, int H, int W, int L, int TO) where T : Control
{
T bu = (T)Controls[n];
bu.Top = TO * this.Height / kuan;
bu.Left = L * this.Width / chang;
bu.Width = W * this.Width / chang;
bu.Height = H * this.Height / kuan; //缩放比例
}
private void Form1_Resize(object sender, EventArgs e)
{
AddControl<Button>("logen", 26, 71, 791, 260);
AddControl<Button>("button1", 23, 31, 856, 3);
AddControl<Button>("button2", 23, 31, 891, 3);
AddControl<Button>("button3", 23, 31, 930, 3);
AddControl<Button>("button4", 23, 49, 801, 3);
AddControl<TextBox>("yonghuming", 26, 90, 483, 260);
AddControl<TextBox>("mima", 26, 91, 659, 260);
AddControl<Label>("label1", 16, 72, 405, 266);
AddControl<Label>("label2", 16, 56, 597, 266);
}
热心网友
时间:2023-10-17 02:28
建议分业或做报表!
你想做在A4也不是不可以, 但你看这窗体的大小! 就算打印出来了也是看不清的! 何必这么麻烦 呢! 建议生成报表再打印!
还有一个方法就是用pagecontrol分页, 然后将内容全部画到 picturebox然后再打映!
因为这个窗口只合适你现在的分辨率, 你把分辨绿调小了,窗体会看不全! 要想看清楚标签,
你应该把 标签(label)控件的 autosize属性设置问 ture , 否则很难显示的,会被覆盖的!追问谢谢,你的回答对我很有帮助!
热心网友
时间:2023-10-17 02:28
用pagecontrol分页,不要都挤在一个页面