C# winform布局 适应多种分辨率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform布局 适应多种分辨率相关的知识,希望对你有一定的参考价值。

我现在正在用C#做一个系统,我所在的系统分辨率是1024*768的将来要用在宽屏,小电脑等多个不同分辨率的的机器上,今天在不同的分辨率上实验,发现在不同的分辨率上布局发生改变,如在800*600的上,我的combox等的长度还是等于我在1024*768上的长度,以至于一排控件中最后的几个无法显示,我的窗口的AutoScaleMode上选的是Dpi。
后来我又尝试改变控件的停靠,将上面的控件Anchor规定为left,right,可是这次再在800*600上显示,控件居然显示不出来了
本人初学C#,什么都不太懂,这个东西又很急,希望那个诸位大侠给予帮助谢谢,本人只有20积分,全部奉上!如方便用QQ31593242知道最好,谢谢!
我是在Panel上放了很多的按钮,txt,在比较低的分辨率下,面板是缩小了,可是上面的控件没有变小,造成了后面的空间就有的看不到了,我在一个窗体上有很多的按钮,txt等,我不太想一个一个去设置他们,另外请问如何按百分比甚至宽度?谢谢!

参考技术A 设置控件的Anchor属性以绑定边缘距离,当然还要设置控件的最小大小,以保证缩小后可以自动调整控件大小 参考技术B Screen.PrimaryScreen.Bounds先获取屏幕的宽度,高度,然后在formload事件里根据宽度,高度,再设置控件的尺寸 参考技术C 放入一个容器FlowLayoutPanel,Dock设置为Fill,你把控件放在FlowLayoutPanel里面,超出范围会自动排列。 参考技术D using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace JG_AUTO_VTS21_08

public class SetHeight

[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);
/// <summary>
/// 设置屏幕
/// </summary>
public void ChangeRes()


DEVMODE DevM = new DEVMODE();
DevM.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
bool mybool;
mybool = EnumDisplaySettings(null, 0, ref DevM);
DevM.dmPelsWidth = 1024;//宽
DevM.dmPelsHeight = 768;//高
DevM.dmDisplayFrequency = 60;//刷新频率
DevM.dmBitsPerPel = 32;//颜色象素
long result = ChangeDisplaySettings(ref DevM, 0);

/// <summary>
/// 还原屏幕
/// </summary>
/// <param name="i">宽</param>
/// <param name="j">高</param>
public void FuYuan(int i,int j)

DEVMODE DevM = new DEVMODE();
DevM.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
bool mybool;
mybool = EnumDisplaySettings(null, 0, ref DevM);
DevM.dmPelsWidth = i;//恢复宽
DevM.dmPelsHeight = j;//恢复高
DevM.dmDisplayFrequency = 60;//刷新频率
DevM.dmBitsPerPel = 32;//颜色象素
long result = ChangeDisplaySettings(ref DevM, 0);





--------------------------------------
//保存当前屏幕分辨率
int i = Screen.PrimaryScreen.Bounds.Width;
int j = Screen.PrimaryScreen.Bounds.Height;

SetHeight setH = new SetHeight();
setH.ChangeRes(); //设置屏幕分辨率

winform如何实现根据屏幕分辨率来适应让程序界面总是全屏呢

我的分辨率为1280*1024,做了个软件在1024*768的电脑上使用,做完后发现在那台电脑上有些东西显示不出来。改怎么改?能不能让他们相对缩小?解决了加分。

参考技术A 窗体属性上面 有一个 AutoScaleMode的属性!自己试试吧

一共4个属性:
1.NONE:不做处理
2.FONT:按字体
3.DPI: 按分辨率
4.Inherit:按父类
参考技术B 不用设大小,窗体有个 WindowState 这个属性,
你把他设置为Maximized,就行了,一打开就是全屏的。

还有就是 其他的控件可能要设置下布局。
参考技术C 相对缩小?你以为是flash啊?
这在界面设计时就必须考虑的.如果界面被放大或缩小怎么处理,C#里有对这方面的控制,但也没你想的那么理想.你需要一点点改了.本回答被提问者采纳
参考技术D 不能

以上是关于C# winform布局 适应多种分辨率的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 适应屏幕分辨率切换问题

C# winform 程序自动适应显示器分辨率

C# WinForm 技巧十: winfrom 全屏自适应屏幕分辨率

多种方法实现自适应布局

winform如何实现根据屏幕分辨率来适应让程序界面总是全屏呢

为多种分辨率设计UI