C#でInputBoxを使ってみた

ユーザーにちょっと文字列を入力してもらうために、文字入力用のダイアログを出したいことがあります。というわけで、InputBoxを使ってみました。 下記の環境で試しました。

  • Visual Studio 2015 Express for Windows Desktop

目次

  1. C#にはInputBoxが無い
  2. Visual Basicのクラスを使う準備
  3. InputBox()メソッド
  4. 試してみた

C#にはInputBoxが無い

Visual StudioでMessageBox風にInputBoxと入力してみたら、IntelliSense先生が何も反応してくれませんでした。調べてみたら、C#にはInputBoxが無いと。「こんな簡単なのは自分で実装しろ」ということなのでしょうか。「モダンなUIではダイアログボックスなんか使わねーよ」ということなのでしょうか。理由はよく分らないのですが無いものは無いので、仕方ありません。自分でダイアログを作るのも面倒な気がしたので、Visual BasicのInputBoxを使うことにしました。

Visual Basicのクラスを使う準備

Visual BasicのInteractionクラスにInputBox()メソッドがありますので、Visual Basicへの参照を追加します。 ソリューションエクスプローラーの「参照」を右クリックして、右クリックメニューの中から「参照の追加」を選択します。 160213-3-01 参照マネージャーダイアログが開くので、「アセンブリ」→「フレームワーク」と選択し、Microsoft.VisualBasicにチェックを付けて、「OK」をクリックします。チェックの付け忘れに注意。 160213-3-02

InputBox()メソッド

InputBox()メソッドの書式をメモっておきます。 InputBoxは、Microsoft.VisualBasic名前空間のInteractionクラスのメソッドです。usingに名前空間を追加するか、メソッドを呼び出す際に名前空間を指定します。

string str = Microsoft.VisualBasic.Interaction.InputBox(prompt, title, default, x, y);

戻り値は文字列です。キャンセルがクリックされると、空の文字列が戻されます。引数は下表の通りです。

引数

内容

prompt

string

ダイアログに表示される文字列

title

string

ダイアログのタイトル

default

string

規定の文字列

x

int

ダイアログの位置(-1で省略)

y

int

ダイアログの位置(-1で省略)

試してみた

ボタンをクリックしたらInputBoxのダイアログが開いて、入力した結果をTextBlockに表示するアプリを作ってみます。 アプリのXAMLは下記のようにしました。

<Window x:Class="inputbox_trial.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:inputbox_trial"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="200">
    <Grid>
        <TextBlock Name="textblock" Margin="10,10,10,100" />
        <Button Name="button" Click="button_Click" Margin="10,90,10,10"/>
    </Grid>
</Window>

TextBlockとButtonを配置して、それぞれにNameを設定しただけですね。 コードの方は下記のようにしました。

using System.Windows;

namespace inputbox_trial
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            string str = Microsoft.VisualBasic.Interaction.InputBox("プロンプト", "タイトル", "規定値", -1, -1);
            textblock.Text = textblock.Text + str + "\r\n";
        }
    }
}

ButtonがクリックされたらInputBoxを表示し、InputBoxの結果を1行ずつTextBlockに追加していきます。 このアプリを実行して、ボタンをクリックした状態が下図です。InputBoxのダイアログが開いて、「規定値」と表示されています。InputBox()メソッドで指定する規定値は、キャンセルしたときに戻る値ではなくてダイアログボックスに最初から入力される文字列なのですね。 160213-3-03 「規定値」で「OK」をクリック → 「キャンセル」をクリック → 「規定値」で「OK」をクリック という風に操作してみました。「OK」をクリックするとダイアログボックスのTextBoxの値が戻り、「キャンセル」をクリックすると空文字が戻ってますね。(「キャンセル」ではTextBlockに空行が表示されるので。) 160213-3-04

公開日

広告