以下是如何在 Windows Mobile 中制作一个如下所示的小型自定义对话框:
alt text http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg
向您的项目添加一个表单,并将其 FormBorderStyle 属性设置为 None。这允许表单调整大小和位置,但也意味着它没有边框或标题栏,并且用户无法移动它。
所以你必须伪造所有三个。伪造边框和标题栏的最简单方法是制作表单 SystemColors.WindowFrame 的 BackColor,然后使用 BackColor = SystemColors.Highlight 和 ForeColor = SystemColor.HighlightText 放置标签(在图片中显示“对话框”的位置) (并加粗字体),然后放置一个带有 BackColor = SystemColors.Window 的面板,您可以在其中看到图片中的白色。您必须调整标签和面板的位置和大小,以便拥有 1 像素的边框(这只是表单的背景色)。
要使表单能够被它的假标题栏拖动,请将此代码添加到表单中(当然您也必须连接事件):
private bool _Moving = false;
private Point _Offset;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
_Moving = true;
_Offset = new Point(e.X, e.Y);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (_Moving)
{
Point newlocation = this.Location;
newlocation.X += e.X - _Offset.X;
newlocation.Y += e.Y - _Offset.Y;
this.Location = newlocation;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (_Moving)
{
_Moving = false;
}
}
另一个问题是,由于没有真正的标题栏,用户无法关闭表单。您必须添加一个确定(或关闭)按钮,并将其放入按钮的 Click 事件中:
this.DialogResult = DialogResult.OK;
通常您会在标题栏上使用鼠标事件来方便拖动,但标签控件没有任何鼠标事件。使用此代码,您实际上可以抓取表单上的任何位置并拖动它,但面板会阻止它并使标题栏成为唯一可以抓取和拖动的地方。
我的另一个答案有更多关于从自定义对话框中获取信息的详细信息。
更新:实际上,只有 明显 方法可以在不添加您自己的确定按钮的情况下关闭无边框表单。只要您不将表单的 ControlBox 属性设置为 False,今日屏幕右上角的 OK 或 X 按钮就会关闭您的对话框,即使它看起来不像,因为它实际上不在表格。