用VS2005 C# WINFORM写了个应用程序,在1024X768下设计的,界面正好,显示完好,但是把程序在800X600下就显示不全,用户无法操作,而如果在比1024X768更高的分辨率下显示就会有很多空的地方,显示也不友好 问:如何才能使界面在不用分辨率下而保持原来的界面效果呢,谢谢!
解决方案 »
- 问下webform何时断开数据库连接?
- C# 操作有密码的excel 2007
- C#怎样才能提高读取SQL数据库的速度?
- 如何让窗体按照正弦轨迹运动?
- textbox 怎样样式 为只有下面的一个横线(wimform)?
- 源码:树型算法和实现,用它就可以把你的数据加载到Win/Web TreeView/Node上了
- 关于下载资源的问题
- DataTable.select如何取得像select distinct F_number from t_user的效果
- 关于计算性能计数器的问题
- C# Serializable到底有啥用
- 非常经典的A+B problem如何读取两个数?
- 设置 FormBorderStyle.None 时,子窗体首次加载不能最大化。要第二次才可以
如果控件不是很多的话.就可以用代码,以groupbox的大小来确定位置.
在网上找了一个方法,可是我也试了好像也不行,代码如下:
定义变量如下
private List <double> dPresentW = new List <double> ();
private List <double> dPresentH = new List <double> ();
private List <double> dPresentT = new List <double> ();
private List <double> dPresentL = new List <double> ();
补充构造函数,例如:
public Form1()
{
InitializeComponent(); foreach (Control ctl in this.Controls)
{
dPresentW.Add((double)ctl.Width / (double)Width);
dPresentH.Add((double)ctl.Height / (double)Height);
dPresentT.Add((double)ctl.Top / (double)Height);
dPresentL.Add((double)ctl.Left / (double)Height);
}
} 然后写ReSize事件
private void Form1_Resize(object sender, EventArgs e)
{
int iCount = Controls.Count;
for (int i = 0; i < iCount; i++)
{
Controls[i].Left = (int)(Width * dPresentL[i]);
Controls[i].Top = (int)(Height * dPresentT[i]);
Controls[i].Width = (int)(Width * dPresentW[i]);
Controls[i].Height = (int)(Height * dPresentH[i]);
}
}大家有没有什么更好的方法呀
int w = Screen.PrimaryScreen.Bounds.Width;
int h = Screen.PrimaryScreen.Bounds.Height;
{
Rectangle rect = Screen.GetWorkingArea(this);
this.Top = 0;
this.Left = 0;
this.Width = rect.Width;
this.Height = rect.Height;
}
然后在GroupBox或者Panel里面来添加其他控件
这样可以简单通过GroupBox或者Panel的Dock属性来调整窗口布局
Public Class Form1 Dim x As Single = 0
Dim y As Single = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'得到原始窗体大小
x = Me.Width
y = Me.Height
setTag(Me)
End Sub Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
'得到现在窗体的大小,然后根据原始大小计算缩放比例
Dim newx As Single = Me.Width / x
Dim newy As Single = Me.Height / y
setControls(newx, newy, Me)
End Sub
'递归取控件的原始大小和位置,用tag来纪录
Private Sub setTag(ByVal obj As Object)
For Each con As Control In obj.Controls
con.Tag = con.Width & ":" & con.Height & ":" & con.Left & ":" & con.Top & ":" & con.Font.Size
'如果是容器控件,则递归继续纪录
If con.Controls.Count > 0 Then
setTag(con)
End If
Next
End Sub
'递归重新设定控件的大小和位置
Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
For Each con As Control In obj.Controls
con.AutoSize = False
Dim mytag() As String = con.Tag.ToString.Split(":")
con.Width = mytag(0) * newx
con.Height = mytag(1) * newy
con.Left = mytag(2) * newx
con.Top = mytag(3) * newy
'计算字体缩放比例,缩放字体
Dim currentSize As Single = newy * mytag(4)
con.Font = New Font(con.Font.Name, currentSize, _
con.Font.Style, con.Font.Unit)
'如果是容器控件,则递归继续缩放
If con.Controls.Count > 0 Then
setControls(newx, newy, con)
End If
Next
End Sub
End Class
同时还要规定一个最小窗口尺寸Form.MinimumSize = new Size(640,480);
{
this.Location = new Point(width * this.width / 1280, height * this.height / 720);
this.Size = new Size(width * this.width / 1280, height * this.height/ 720);
}--------------
int width;
int height; 是当前分辨率的 x,y
1280 720为你改变前的x,y
而且不光控件大小要变,里面字体的大小也要跟着变,改起来烦的很
不知道,用DOCK的话,字体能不能变呢?
一般窗体大小不会随系统分辨率调整,常用的1024*768(17纯平)、1280*1024(17液晶)和宽屏(1280*768),这个一般会根据客户需求来确定分辨率,在进行开发。
一般窗体大小不会随系统分辨率调整,常用的1024*768(17纯平)、1280*1024(17液晶)和宽屏(1280*768),这个一般会根据客户需求来确定分辨率,在进行开发。
一般窗体大小不会随系统分辨率调整,常用的1024*768(17纯平)、1280*1024(17液晶)和宽屏(1280*768),这个一般会根据客户需求来确定分辨率,在进行开发。