【发布时间】:2010-01-16 07:48:36
【问题描述】:
我想在 .NET Compact Framework 中将使用 Form.ShowDialog() 启动的弹出表单居中。我在 .NET CF Form 对象中看不到任何像 StartPosition 这样的属性。
有人可以建议我如何在 .NET CF 3.5 中居中弹出窗口吗?
【问题讨论】:
标签: c# .net compact-framework
我想在 .NET Compact Framework 中将使用 Form.ShowDialog() 启动的弹出表单居中。我在 .NET CF Form 对象中看不到任何像 StartPosition 这样的属性。
有人可以建议我如何在 .NET CF 3.5 中居中弹出窗口吗?
【问题讨论】:
标签: c# .net compact-framework
您可以创建一个为您工作的扩展方法:
public static class FormExtensions
{
public static void CenterForm(this Form theForm)
{
theForm.Location = new Point(
Screen.PrimaryScreen.WorkingArea.Width / 2 - theForm.Width / 2,
Screen.PrimaryScreen.WorkingArea.Height / 2 - theForm.Height / 2);
}
}
你这样称呼它:
TheDialogForm f = new TheDialogForm();
f.CenterForm();
f.ShowDialog();
【讨论】:
Location 或Bounds 属性?
如果没有为对话框定义父级,则使用
login.StartPosition = FormStartPosition.CenterScreen;
login.ShowDialog();
其中 login 是 Form 对象
或者,如果您在现有父 Form 之上调用,您也可以使用
login.StartPosition = FormStartPosition.CenterParent;
login.ShowDialog();
这个属性也可以在Form的属性对话框中设置,如果你认为这个属性对你来说总是一样的。默认情况下,它应该设置为 CenterParent,如果您在某些情况下在父 Form 之前调用您的 Form,这将不起作用,例如第一次登录屏幕等。
【讨论】:
如果您希望弹出表单默认显示在屏幕中心,您可以在表单属性中为其设置起始位置,它应该听起来像“中心父级”。
类似这样的:
form1.StartPosition = FormStartPosition.CenterScreen;
【讨论】:
StartPosition 属性在 .NET Compact Framework 中不可用。
我知道这是旧帖子,但我遇到了同样的问题,我用这种方式解决了:
我创建一个接口:
public interface FormExtensions
{
void CenterForm(Form forma);
}
在我的类上实现了接口之后:
public partial class frmFirma : Form, FormExtensions
{
public frmFirma()
{
InitializeComponent();
}
public void CenterForm(Form forma)
{
forma.Location = new Point(
Screen.PrimaryScreen.WorkingArea.Width / 2 - forma.Width / 2,
Screen.PrimaryScreen.WorkingArea.Height / 2 - forma.Height / 2);
}
}
然后我可以创建一个实例:“frmFirma”并调用方法“CenterForm”:
private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
Formas.frmFirma firma = new Formas.frmFirma();
firma.CenterForm(firma);
firma.ShowDialog();
}
我希望这对某人有用。
【讨论】:
在'frmDialog_Activated事件中设置表单的left和Top属性
Private Sub frmDialog_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
Me.Left = (frmMain.Width - Me.Width) / 2 ' AS Your Wish
Me.Top = (frmMain.Height - Me.Height) / 2 + 165 '' AS Your Wish
End Sub
【讨论】:
这是最简单的方法
Form f= new AmrDealForm();
f.CenterToScreen();
f.ShowDialog();
【讨论】: