プロが教えるわが家の防犯対策術!

Console.ReadLine()で、入力デフォルト値を指定できますか?

C#でプログラムをつくっています。
Console.ReadLine()を使えば、コマンドプロンプト上からのキー入力を文字列として受け取れますが、最初は空の状態です。
例えば、

string s = Console.ReadLine()

を実行し、Enterキーを押すと、sは何も入力されませんが、デフォルト値を指定することで、ユーザーがただEnterキーを押したときに、デフォルト値を返すような方法はありますか?
また、指定したデフォルト値を画面上に表示し、ユーザーが編集できるような方法はありますでしょうか?

どうぞよろしくお願いします。

A 回答 (5件)

何だかよさそうなもの見付けましたよ。



説明(英語): http://tirania.org/blog/archive/2008/Aug-26.html
ライブラリ(これを取り込む): http://anonsvn.mono-project.com/source/trunk/mcs …

LineEditorのEdit()メソッドは第1引数がプロンプトで第2引数が初期値のようです。
C#の基本ライブラリのみに依存し、外部プログラムは必要ないそうです。
ライセンスも制限が緩いもののようです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
早速試してみたいと思います。

お礼日時:2010/09/19 06:15

#3です。


>abcdeと表示したあと、キー入力待ちとなって、そのabcdeを編集できないか?ということなんです。
>もちろん、Console.ReadLine()がそのような引数を取らないのは分かっていますので、何か別のメソッドがあればと思ったのですが、、

なるほど、そういうことですか。
コンソールアプリケーションの場合、上記を簡単に実現するメソッドは無いようです。カーソル位置を制御するメソッドがあるので、デフォルトの値を出力後、そのデフォルト値の先頭にカーソルを位置づけてReadLineを行えば、できるかも知れませんが、やったことはないので、判りません。もし、出来たとしても、コンソール上のカーソル位置の制御を全て自前で行いますので、相当大変かと思います。
GUIが使用できるなら、テキストボックスにデフォルト値を表示させて、それをユーザーに編集してもらい、取り込むのが、簡単かと思います。

参考URL:http://msdn.microsoft.com/ja-jp/library/system.c …
    • good
    • 0

>本当は、デフォルト値を編集する方法がメインで聞きたいことなんです。


ユーザーにデフォルト値を編集してもらえるようにするなら、自分でそのような仕組みを実装する必要があります。
1例としては、以下のような方法があります。
このデフォルト値を定義したファイルを「デフォルト定義ファイル」と呼ぶことにします。
デフォルト定義ファイルは、CSV形式(タブ区切り、又はカンマ区切り)とします。
デフォルトの項目名,デフォルト値
をそのファイルに定義します。例として、以下のようになります。
name1,defaultdata1
name2,defaultdata2
name3,defaultdata3
ここでデフォルトの項目名(name1,2,3)は、プログラムの内部で抱える名称になるので、
ユーザは、編集しないものとします。(編集は出来るが、紳士協定でしないことにする)
編集できるのは、defaultdata1,2,3のみとします。
このファイルを予め、決められた場所においておき、そのファイルを起動時に読み込んで、
defaultdata1,2,3をプログラムで使用するようにします。

もし、上記の作業が大変なら、動的プロパティを使う方法がありますが、
一般ユーザーが、このデフォルト値を編集すると言うよりは、システムの管理者が、このデフォルトを
編集するのに近い形になります。その分リスクが高くなりますが、それでも良いと割り切れるなら、
動的プロパティをつかうのも、一つの案です。
動的プロパティについては、参考URLを参照下さい。

参考URL:http://uchukamen.com/Programming1/DynamicProperty/

この回答への補足

回答ありがとうございます。

私がやりたかったことは、Console.ReadLine()を例にすると、

string s = Console.ReadLine("abcde");

とすると、abcdeと表示したあと、キー入力待ちとなって、そのabcdeを編集できないか?ということなんです。
もちろん、Console.ReadLine()がそのような引数を取らないのは分かっていますので、何か別のメソッドがあればと思ったのですが、、

補足日時:2010/09/14 06:34
    • good
    • 0

できません


いきなりEnterは、
""という文字列が入力された
ということで、
何も入力しなかったという意味ではありません
    • good
    • 0

ReadLine()を呼んだ後、sの中身が空だったら、sにデフォルト値を代入すればよいと思います。



デフォルト値を編集できるようにする方法は私はわかりませんが、たぶん難しいと思います。
私はC#はHello Worldしか書いたことがないので、あとは他の人にゆずります。

この回答への補足

回答ありがとうございます。

自分の質問を読み返してみると、質問の仕方が悪かったです。
本当は、デフォルト値を編集する方法がメインで聞きたいことなんです。

補足日時:2010/09/13 06:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!