トップ回答者
チャットのEnterキーを押した後、次に改行が残る

質問
-
チャットを作っているのですがtextbox1で入力した内容をtextbox2に追記して
textbox1を空にすると改行がtextbox1に残ってしまい1段下がった状態に
なってしまいます。
おそらく、キーダウンに反応した時、イベント処理を行ってからそのときのEnterを
入力してしまっているからだと思います。
これを回避する方法をご存知の方いらっしゃいましたら
ご連絡いただけましたら幸いです。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter & e.Modifiers != Keys.ControlKey)
{
textBox2.Text += textBox1.Text;textBox1.Text = "";
textBox1.Focus();
}
}
回答
-
最初の質問でのこのコードを見ていただければご理解いただけると思います。
すみません、見直しサボって見落としました。
このコードから察するに改行することはほとんどない(送信よりも優先度が低い)ということでしょうか。
# 手元に実験コード作っておいてよく見てなかった…。IME などによって性質が変わるかもしれませんが、KeyPress イベントを使ってみてはいかがでしょうか。
KeyChar == (char)Keys.Enter && Control.ModifierKeys != Keys.Control みたいな条件で e.Handled = true; にしてやればできそうかなぁ。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2011年11月25日 8:53
-
ご返答ありがとうございます。結論から申し上げますと下記のようにしたらできました。
皆様ご回答ありがとうございます。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter & e.KeyChar != (char)Keys.ControlKey)//AltでもShiftどっちでも結果は一緒でした。
{textBox2.Text += textBox1.Text;
textBox1.Text = "";
e.Handled = true;
}
}- 回答としてマーク 山本春海 2011年11月25日 8:53
すべての返信
-
改行、IME での確定を単なる Enter キー、チャットの送信を Ctrl+Enter キーとかにすればよいのでは。
今の話では、複数行入力のための改行での Enter キー押下と送信のための Enter キー押下が区別つかないように聞こえるので。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 編集済み AzuleanMVP, Moderator 2011年11月12日 2:56
-
最初の質問でのこのコードを見ていただければご理解いただけると思います。
すみません、見直しサボって見落としました。
このコードから察するに改行することはほとんどない(送信よりも優先度が低い)ということでしょうか。
# 手元に実験コード作っておいてよく見てなかった…。IME などによって性質が変わるかもしれませんが、KeyPress イベントを使ってみてはいかがでしょうか。
KeyChar == (char)Keys.Enter && Control.ModifierKeys != Keys.Control みたいな条件で e.Handled = true; にしてやればできそうかなぁ。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2011年11月25日 8:53
-
ご返答ありがとうございます。結論から申し上げますと下記のようにしたらできました。
皆様ご回答ありがとうございます。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter & e.KeyChar != (char)Keys.ControlKey)//AltでもShiftどっちでも結果は一緒でした。
{textBox2.Text += textBox1.Text;
textBox1.Text = "";
e.Handled = true;
}
}- 回答としてマーク 山本春海 2011年11月25日 8:53