[INMN06687] テキストがコントロール幅を超える時、TextHAlignプロパティが適用されない
対象製品
InputMan for .NET 4.0J Windows Forms Edition
発生環境
動作環境と同じ
詳細
この現象はComboコントロールで発生します。以下の条件を満たすとき、コントロールがフォーカスを失った場合でもTextHAlignの設定が適用されず、フォーカス取得時のテキストの表示位置が保持されます。
1. DropDownStyleプロパティがDropDownに設定されている。
2. コントロールの幅を超える長さのテキストが設定されている。
この動作は製品の仕様に基づくものです。TextHAlignプロパティは、テキストがコントロールの幅を超えないときのみ適用されます。
1. DropDownStyleプロパティがDropDownに設定されている。
2. コントロールの幅を超える長さのテキストが設定されている。
この動作は製品の仕様に基づくものです。TextHAlignプロパティは、テキストがコントロールの幅を超えないときのみ適用されます。
回避方法
LeaveイベントでSelectionStartイベントを設定することでTextHAlignがLeftとRightの場合についてはこの問題を回避することができます。
[VB]
Public Class Form1
Private m_selectionStart As Int32
Private m_selectionLength As Int32
Private Sub Combo1_Enter( ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Combo1.Enter
' フォーカス取得時のカレットの位置と選択状態を復元します。
Combo1.SelectionStart = m_selectionStart
Combo1.SelectionLength = m_selectionLength
End Sub
Private Sub Combo1_Leave( ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Combo1.Leave
' フォーカス取得時のカレットの位置と選択状態を保存します。
m_selectionStart = Combo1.SelectionStart
m_selectionLength = Combo1.SelectionLength
Select Combo1.TextHAlign
Case AlignHorizontal.Left
' カレットを左端に移動し、テキストを左揃えします。
Combo1.SelectionStart = 0
Case AlignHorizontal.Right
' カレットを右端に移動し、テキストを秘儀揃えします。
Combo1.SelectionStart = Combo1.Text.Length
End Select
End Sub
End Class
[C#]
public partial class Form1 : Form
{
// フォーカス取得時のカレットの位置と選択状態を保存します。
private int m_selectionStart;
private int m_selectionLength;
public Form1()
{
InitializeComponent();
}
private void combo1_Enter( object sender, EventArgs e )
{
// フォーカス取得時のカレットの位置と選択状態を復元します。
combo1.SelectionStart = m_selectionStart;
combo1.SelectionLength = m_selectionLength;
}
private void combo1_Leave( object sender, EventArgs e )
{
// フォーカス取得時のカレットの位置と選択状態を保存します。
m_selectionStart = combo1.SelectionStart;
m_selectionLength = combo1.SelectionLength;
switch( combo1.TextHAlign )
{
case AlignHorizontal.Left:
{
// カレットを左端に移動し、テキストを左揃えします。
combo1.SelectionStart = 0;
break;
}
case AlignHorizontal.Right:
{
// カレットを右端に移動し、テキストを右揃えします。
combo1.SelectionStart = combo1.Text.Length;
break;
}
}
}
}
[VB]
Public Class Form1
Private m_selectionStart As Int32
Private m_selectionLength As Int32
Private Sub Combo1_Enter( ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Combo1.Enter
' フォーカス取得時のカレットの位置と選択状態を復元します。
Combo1.SelectionStart = m_selectionStart
Combo1.SelectionLength = m_selectionLength
End Sub
Private Sub Combo1_Leave( ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Combo1.Leave
' フォーカス取得時のカレットの位置と選択状態を保存します。
m_selectionStart = Combo1.SelectionStart
m_selectionLength = Combo1.SelectionLength
Select Combo1.TextHAlign
Case AlignHorizontal.Left
' カレットを左端に移動し、テキストを左揃えします。
Combo1.SelectionStart = 0
Case AlignHorizontal.Right
' カレットを右端に移動し、テキストを秘儀揃えします。
Combo1.SelectionStart = Combo1.Text.Length
End Select
End Sub
End Class
[C#]
public partial class Form1 : Form
{
// フォーカス取得時のカレットの位置と選択状態を保存します。
private int m_selectionStart;
private int m_selectionLength;
public Form1()
{
InitializeComponent();
}
private void combo1_Enter( object sender, EventArgs e )
{
// フォーカス取得時のカレットの位置と選択状態を復元します。
combo1.SelectionStart = m_selectionStart;
combo1.SelectionLength = m_selectionLength;
}
private void combo1_Leave( object sender, EventArgs e )
{
// フォーカス取得時のカレットの位置と選択状態を保存します。
m_selectionStart = combo1.SelectionStart;
m_selectionLength = combo1.SelectionLength;
switch( combo1.TextHAlign )
{
case AlignHorizontal.Left:
{
// カレットを左端に移動し、テキストを左揃えします。
combo1.SelectionStart = 0;
break;
}
case AlignHorizontal.Right:
{
// カレットを右端に移動し、テキストを右揃えします。
combo1.SelectionStart = combo1.Text.Length;
break;
}
}
}
}
この文書は、以前は次のFAQ IDで公開されていました : 7400