C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: SendKeys.Send wo


(過去ログ 115 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■67730 / inTopicNo.1)  SendKeys.Send wo
  
□投稿者/ ハロー (1回)-(2013/08/28(Wed) 08:54:12)

分類:[.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() で同じように動作させたいのですがどうすればよいですか?

以上よろしくお願いします。
引用返信 編集キー/
■67731 / inTopicNo.2)  Re[1]: SendKeys.Send wo
□投稿者/ ハロー (2回)-(2013/08/28(Wed) 08:58:03)
すみません。
タイトル入力の途中で半角入力中なのに全角と勘違いしてEnterを押してしまい、投稿してしまいました。
正確には「SendKeys Send をつかった入力フォームの作成について」です。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -