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

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

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

Re[3]: 数字のみTEXTBOXで、ALT+漢字キーを無視したい。


(過去ログ 95 を表示中)

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

■57006 / inTopicNo.1)  数字のみTEXTBOXで、ALT+漢字キーを無視したい。
  
□投稿者/ むうさん (1回)-(2011/02/08(Tue) 19:44:06)

分類:[.NET 全般] 

C# 2010 WPF環境です。

テキストボックの数字のみ 入力クラスを作成したのですが。
IMEのALT+全角を押すとIMEが半角から全角に変更されます。
変更しない様にする方法がありましたら教えて




/*--------------------------------------------------------------
* 数字 テキスト 000010 DSP 0->00000
*--------------------------------------------------------------*/

public class OtsTextNumber : TextBox
{

static OtsTextNumber()
{
}


// 項目の正常(真) 異常(偽)
private bool m_Momal = true;

public bool Momal
{
get { return m_Momal; }
set { m_Momal = value; }
}

/*
*
*/

protected override void OnGotFocus(System.Windows.RoutedEventArgs e)
{
base.OnGotFocus(e);

//
this.Text = this.Text.Replace(",", "");

InputMethod.SetPreferredImeState(this, InputMethodState.DoNotCare);
InputMethod.SetPreferredImeConversionMode(this, ImeConversionModeValues.Alphanumeric);
InputMethod.SetPreferredImeSentenceMode(this, ImeSentenceModeValues.Automatic);

this.Background = Brushes.LightBlue;

if (this.Text == "")
{
return;
}

try
{



if (int.Parse(this.Text) < 0)
{
this.Text = string.Format("{0:" + new String('0',this.MaxLength) + "}", int.Parse(this.Text));
}
}
catch
{
this.Text = "";
};


}


protected override void OnLostFocus(System.Windows.RoutedEventArgs e)
{

base.OnLostFocus(e);
// Change the TextBox color
if (this.Momal == true)
{
this.Background = Brushes.White;
}
else
{
this.Background = Brushes.Pink;
}



if (this.Text == "")
{
return;
}

try
{
this.Text = string.Format("{0:" + new String('0', this.MaxLength) + "}", int.Parse(this.Text));
}
catch
{
this.Text = "";
};



}

/*
*
*/
protected override void OnPreviewKeyDown(KeyEventArgs e)
{


base.OnPreviewKeyDown(e);

switch (e.Key)
{

case Key.D1:
case Key.D2:
case Key.D3:
case Key.D4:
case Key.D5:
case Key.D6:
case Key.D7:
case Key.D8:
case Key.D9:

case Key.NumPad1:
case Key.NumPad2:
case Key.NumPad3:
case Key.NumPad4:
case Key.NumPad5:
case Key.NumPad6:
case Key.NumPad7:
case Key.NumPad8:
case Key.NumPad9:
case Key.D0:
case Key.NumPad0:
break;
case Key.Back:
case Key.Insert:
case Key.Delete:
case Key.Tab:
case Key.OemBackTab:
// case Key.Up:
// case Key.Down:
case Key.Right:
case Key.Left:
break;
default:
e.Handled = true;
break;
}
}

/*
*
*/
protected override void OnPreviewKeyUp(KeyEventArgs e)
{
base.OnPreviewKeyUp(e);

/*
* Enter で次のキー
*/
if ((Keyboard.Modifiers == ModifierKeys.None) && (e.Key == Key.Enter) && this.IsTabStop == true)
{
UIElement element = this as UIElement;
element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}

}
}
引用返信 編集キー/
■57015 / inTopicNo.2)  Re[1]: 数字のみTEXTBOXで、ALT+漢字キーを無視したい。
□投稿者/ shu (418回)-(2011/02/09(Wed) 08:23:44)
No57006 (むうさん さん) に返信

http://hokkai53.cocolog-nifty.com/blog/2007/12/9wpf_imemode_5bcd.html
にそれっぽいのが載ってました

WPFはIme制御がコントロールと独立しているようです。
引用返信 編集キー/
■57066 / inTopicNo.3)  Re[2]: 数字のみTEXTBOXで、ALT+漢字キーを無視したい。
□投稿者/ むうさん (2回)-(2011/02/10(Thu) 16:35:57)
No57015 (shu さん) に返信
> ■No57006 (むうさん さん) に返信
>
> http://hokkai53.cocolog-nifty.com/blog/2007/12/9wpf_imemode_5bcd.html
> にそれっぽいのが載ってました
>
> WPFはIme制御がコントロールと独立しているようです。

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

Ime制御は、正しく正常できないとの事ですね。


引用返信 編集キー/
■57072 / inTopicNo.4)  Re[3]: 数字のみTEXTBOXで、ALT+漢字キーを無視したい。
□投稿者/ よねKEN (673回)-(2011/02/10(Thu) 23:44:18)
> IMEのALT+全角を押すとIMEが半角から全角に変更されます。
> 変更しない様にする方法がありましたら教えて

OtsTextNumberクラスのソースコードで一度だけ

InputMethod.SetIsInputMethodEnabled(this, false);

を実行しておけばOKです。

今回のようにカスタムコントロールを作るという話でなければ、
xamlファイルでTextBoxで添付プロパティInputMethod.IsInputMethodEnabled
を以下のようにFalseに指定するとIME制御不可になります。

例)
<TextBox Height="24" HorizontalAlignment="Left" Margin="172,140,0,0" Name="textBox1" VerticalAlignment="Top" Width="120"
InputMethod.IsInputMethodEnabled="False" />


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -