如何实现根据分辨率自动调整winform控件大小

binfenworld 2009-10-13 05:21:49
如何让做好的winform界面在不同的分辨率下显示效果相同?
比喻在1440*900的分辨率下做的界面,拿到800*600下,有些空间被遮住了,显示不出来,还有好多控件错位了,
如何解决?
...全文
4063 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lorna-Blog 2012-08-31
  • 打赏
  • 举报
回复
楼主怎么解决的,我QQ2359153777 加我讨论,教教我呗。。。
eclair1bb 2012-07-23
  • 打赏
  • 举报
回复
这贴几年了,问什么还没有人来结束啊
RobinLi_VIP 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 gxsww 的回复:]

26 楼的代码可以用,要改一下
//加载时改变屏幕分辨率
private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
{
SetResolution.ChangeRes(1440, 800);
}

改成
//加载时改变屏幕分辨率
private void LoginForm_Load……
[/Quote]
这么强制性的改,对客户来说,满意度大大降低!哎,急呀!
weishao1223 2011-10-18
  • 打赏
  • 举报
回复
我也碰到了这个问题,迫切需要答案
qingniaofu 2011-08-09
  • 打赏
  • 举报
回复
我也碰到此问题,
等待高手。。。
guowenzhou 2011-07-01
  • 打赏
  • 举报
回复
关注中啊。。火急?
ihyaml 2011-05-26
  • 打赏
  • 举报
回复
正好用到。。
yinqi025 2010-09-06
  • 打赏
  • 举报
回复
怎么会有这样的结帖率?
yinqi025 2010-09-06
  • 打赏
  • 举报
回复
怎么会有这样的结帖率?
larryxie8888 2010-07-18
  • 打赏
  • 举报
回复
不错不错
lanxiang821 2010-07-09
  • 打赏
  • 举报
回复
我也正在等这个问题呢!有哪位知道啊!
gxsww 2010-07-07
  • 打赏
  • 举报
回复
26 楼的代码可以用,要改一下
//加载时改变屏幕分辨率
private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
{
SetResolution.ChangeRes(1440, 800);
}

改成
//加载时改变屏幕分辨率
private void LoginForm_Load(object sender, FormClosingEventArgs e)
{
SetResolution.ChangeRes(1440, 800);
}


但是这个方法好像 不太现实吧,就是把客户电脑的分辨率改成1440,800
而且屏幕还会黑一下.
应该不几个客户受得了的,
还有哪位高手有实际一点的方法不,正遇到这个问题呢
1024X768下开发的,到了1400X900下控件全乱了
jzj083271930 2010-01-26
  • 打赏
  • 举报
回复
我也正在等这个问题呢!有哪位知道啊!
hubint53 2010-01-13
  • 打赏
  • 举报
回复
关注
xqy_2007 2009-10-26
  • 打赏
  • 举报
回复
关注一下!
xiaoshu666 2009-10-26
  • 打赏
  • 举报
回复
选择窗体中控件的 anchor 中的属性值,能把控件和窗体的不同边缘比例绑定,当窗体自适应时,控件也能自适应。
binfenworld 2009-10-14
  • 打赏
  • 举报
回复
我的要求是这样的,我的所有窗体都是继承与一个基本窗体的,而基本窗体继承与form,我想在基本窗体里加上一个方法,然后再基本窗体的Load事件里调用这个方法或在构造函数里调用,就实现窗体里的控件自动按不同的分辨率调整大小,去适应窗体。
网上的那个根据分辨率改变窗体里空间的size和location这两个属性的做法也不能达到我的要求
binfenworld 2009-10-14
  • 打赏
  • 举报
回复
26楼的,你的代码我试过了,不好用啊,根本就没有什么改变。
还有,你代码里一个LoginForm_FormClosing,为什么有2个实现?
LutzMark 2009-10-14
  • 打赏
  • 举报
回复
我写这么清楚还不明白啊...

那我再写个更简单的,你直接copy就能用了

namespace 你的命名空间名{
public class SetResolution
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct DEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public short dmOrientation;
public short dmPaperSize;
public short dmPaperLength;
public short dmPaperWidth;
public short dmScale;
public short dmCopies;
public short dmDefaultSource;
public short dmPrintQuality;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
}

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int ChangeDisplaySettings([In]ref DEVMODE lpDevMode, int dwFlags);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern bool EnumDisplaySettings(string lpszDeviceName, Int32 iModeNum, ref DEVMODE lpDevMode);

public static void ChangeRes(int width, int height)
{
DEVMODE devM = new DEVMODE();
devM.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
bool mybool;
mybool = EnumDisplaySettings(null, 0, ref devM);
devM.dmPelsHeight = height;
devM.dmPelsWidth = width;
devM.dmDisplayFrequency = 75;
devM.dmBitsPerPel = 32;
long result = ChangeDisplaySettings(ref devM, 0);
}
}
}


public class Form1 : System.Windows.Forms.Form
{
protected int OriginalScreenSizeWidth = Screen.PrimaryScreen.Bounds.Width;
protected int OriginalScreenSizeHeight = Screen.PrimaryScreen.Bounds.Height;

//加载时改变屏幕分辨率
private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
{
SetResolution.ChangeRes(1440, 800);
}
//退出时还原分辨率
private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
{
SetResolution.ChangeRes(OriginalScreenSizeWidth, OriginalScreenSizeHeight);

}
}
}
ConanKid 2009-10-14
  • 打赏
  • 举报
回复
也许以后会有用了.14楼的方案.以后用到了再试.
加载更多回复(29)

110,545

社区成员

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

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

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