|
分類:[.NET 全般]
Microsoft Visual Studio 2010 c# .net です。
目的:テキストボックスにひらがなを入力することです。
フォームが3つあります。
1.メインフォーム ボタン1つ: サブフォームを呼び出す。
public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ShowDialog(); f2.Dispose(); } }
2.サブフォーム テキストボックス1つ:入力用(ImeMode = Hiragana)
public partial class Form2 : Form { public Form2() { InitializeComponent(); }
From3 f3;
private void textBox1_Enter(object sender, EventArgs e) { f3 = new From3(textBox1); f3.Show(); }
private void textBox1_Leave(object sender, EventArgs e) { f3.Dispose(); } }
3.入力キーフォーム 取り合えずボタン2つ:キー入力(ButtonをButtonExに変更)
public partial class From3 : Form { Control _ctrl;
private const int WS_EX_NOACTIVATE = 0x8000000; protected override CreateParams CreateParams { get { CreateParams p = base.CreateParams; if (!base.DesignMode) { p.ExStyle = p.ExStyle | (WS_EX_NOACTIVATE); } return p; } }
public From3(Control ctrl) { _ctrl = ctrl; InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { _ctrl.Focus(); SendKeys.Send("k"); }
private void button2_Click(object sender, EventArgs e) { _ctrl.Focus(); SendKeys.Send("a"); } }
class ButtonEx : Button { public ButtonEx() { base.SetStyle(ControlStyles.Selectable, false); } }
以上のプログラムで質問なのですが
1.キー入力フォームは、アクティブにならないようにCreateParams や、ButtonEx を使用しているのに _ctrl を渡して、SendKeys の前に _ctrl.focus() しないと文字が入力されません。 アクティブがTextBoxからnullになるようです。このため、入力のたびにフォームがちらつきます。 _ctrl を引き渡さなくても、現状のアクティブコントロールをtextBox1にしたまま動作させることは できないのでしょうか? 2.現在、button1 → button2 を押すと 「kあ」となってしまいます。("あ"が未確定状態) button1 → button2 → button1 → button2 だと「kあkあ」となってしまいます。(最後の"あ"だけ未確定状態) サブフォームの呼出しで Form2 f2 = new Form2(); f2.ShowDialog(); f2.Dispose(); を Form2 f2 = new Form2(); f2.Show(); にすると、正常に「か」("か"が未確定状態),「かか」("かか"が未確定状態)の正常な動作をします。 ShowDialog() で同じように動作させたいのですがどうすればよいですか?
以上よろしくお願いします。
|