C# 本身沒有內建 InputBox 類別,但有時我們需要快速彈出一個輸入對話方塊取得使用者輸入。本文介紹兩種實現方式:一是直接參考 Visual Basic 組件使用現成的 Interaction.InputBox;二是自行繼承 Form 打造功能更豐富的自訂輸入框。
Microsoft.VisualBasic。using Microsoft.VisualBasic;textBox1.Text = Interaction.InputBox(
"提示文字", // Prompt
"對話方塊標題", // Title
"預設值", // DefaultResponse
-1, // X 座標 (-1 為螢幕置中)
-1 // Y 座標 (-1 為螢幕置中)
);
優點: 幾行程式碼即可完成,零學習成本。
缺點: 介面固定、無法自訂驗證邏輯、不支援密碼遮罩、樣式無法配合專案風格。
繼承 Form,動態建立 Label、TextBox、Button,支援密碼模式、自訂標題/提示、回傳 DialogResult 與輸入值。
public partial class InputBox : Form
{
private InputBox()
{
InitializeComponent(); // 設計器產生的元件初始化
}
public string GetValue() => textBox1.Text;
///
/// 顯示輸入對話方塊
///
/// 視窗標題
/// 提示文字
/// 是否密碼模式
/// 輸出參數:使用者輸入的值
/// 使用者按下確定回傳 true,否則 false
public static bool Show(string title, string inputTips, bool isPassword, ref string value)
{
using (var ib = new InputBox())
{
if (!string.IsNullOrEmpty(title)) ib.Text = title;
if (!string.IsNullOrEmpty(inputTips)) ib.label1.Text = inputTips;
if (isPassword) ib.textBox1.PasswordChar = '*';
if (ib.ShowDialog() == DialogResult.OK)
{
value = ib.GetValue();
return true;
}
return false;
}
}
}
string inputValue;
if (InputBox.Show("使用者登入", "請輸入密碼:", true, ref inputValue))
{
// 使用者按下確定,inputValue 為輸入內容
// 執行驗證邏輯...
}
textBox1_KeyPress 或 Validating 事件中限制字元類型(如僅允許數字)。Dictionary<string, string>。AcceptButton、CancelButton,支援 Enter/ESC 鍵操作。Screen.FromControl(owner) 計算置中座標,避免跨螢幕顯示異常。| 需求 | 建議方案 |
|---|---|
| 快速原型、內部工具、不需密碼欄位 | 方法一(VB InputBox) |
| 正式產品、需密碼遮罩、自訂驗證、品牌化介面 | 方法二(自訂表單) |
| 需多欄位、複雜互動、資料綁定 | 擴充方法二或使用第三方元件庫 |
依專案需求選擇適當方案,即可在 C# 專案中輕鬆獲得 InputBox 功能。