2008-11-19 49 views
4

我期待有一個簡單的自定義對話框,就像一個消息框,有一個標籤和一個文本框。如果有一個簡單的方法可以做到這一點,對不起!我真的不熟悉對話的東西。winmobile中的文本字段的自定義對話框

感謝您的幫助,夥計!

+0

您對Visual Studio,C#和winforms開發有多少經驗? – MusiGenesis 2008-11-19 17:25:32

回答

11

下面是如何在Windows Mobile的一個小的自定義對話框,如下所示:

alt text http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg

添加表格到您的項目,並設置其FormBorderStyle屬性爲None。這允許表單被調整大小和位置,但也意味着它沒有邊框或標題欄,並且用戶無法移動它。

所以你必須假三個。僞造邊框和標題欄的最簡單方法是製作表單SystemColors.WindowFrame的BackColor,然後在BackColor = SystemColors.Highlight和ForeColor = SystemColor.HighlightText中放置一個標籤(圖中所示爲「Dialog」) (並粗體顯示字體),然後在BackColor = SystemColors.Window中放置一個面板,您可以在圖片中看到白色。你必須調整標籤和麪板的位置和大小,以便你有一個1像素的邊框(這只是你的表單的BackColor顯示)。

爲了使形式被其假標題欄上拖動,將此代碼添加到窗體(當然你必須要連接的事件,太):

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; 
    } 
} 

另外一個問題是,因爲沒有真正的標題欄,用戶無法關閉表單。你必須添加一個OK(或關閉)按鈕,並把這個按鈕的Click事件:

this.DialogResult = DialogResult.OK; 

通常你會使用標題欄上的鼠標事件,以方便拖動,但標籤控制不有任何鼠標事件。使用這段代碼,你實際上可以在表單上的任意位置抓取並拖動它,除了面板阻止了這一點,並使標題欄成爲唯一抓取和拖動的地方。

我的其他答案有更多關於從自定義對話框中獲取信息的細節。

更新:實際上,只有沒有明顯方式來關閉無邊界窗體,而無需添加您自己的確定按鈕。只要您不將表單的ControlBox屬性設置爲False,則Today屏幕右上角的OK或X按鈕將關閉對話框,即使它看起來不像它,因爲它實際上並不在形成。

0

我假設你基本上要返回用戶輸入的字符串自定義對話框。一種方法是將Microsoft.VisualBasic的引用添加到您的項目中,從而使您可以訪問InputBox方法,該方法基本上是一個帶有文本框的消息框。但這並不好玩,我也不確定它會在智能手機上工作。

要展開自己的作品,只需在表單中添加一個表單(名爲CustomDialog),然後將一個文本框(textBox1),一個標籤(label1)和一個按鈕(標記爲「OK」)拖到其上。

要設置標籤文本,將參數添加到窗體的構造是這樣的:

public CustomDialog(string textCaption) 
{ 
    label1.Text = textCaption; 
} 

爲了揭露輸入的文本給調用者,該代碼添加到窗體:

public override string Text 
{ 
    get 
    { 
     return textBox1.Text; 
    } 
} 

在確定按鈕的單擊事件中,輸入以下代碼:

this.DialogResult = DialogResult.OK; // this will close the form, too 

要在主窗體中使用此對話框,請將cre吃了這種形式的一個實例,顯示它,請檢查OK按鈕被點擊,然後讀取它的Text屬性(返回用戶輸入的內容),像這樣:

using (CustomDialog dialog = new CustomDialog("What is your name")) 
{ 
    if (dialog.ShowDialog(this) == DialogResult.OK) 
    { 
     string enteredText = dialog.Text; 
    } 
} 

你可以得到票友,但這些是基礎知識。

1

如果你想要一個超級簡單的,但[T]醜陋的解決方案,您可以在您的項目Microsoft.VisualBasic程序,它可以讓你使用VB功能的InputBox這樣的引用:

string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text", 
    "title text", "default value", 0, 0); 

的對話框佔據整個屏幕,但使用起來很簡單。但正如我所提到的那樣令人難以置信的難看。