[INMN06687] テキストがコントロール幅を超える時、TextHAlignプロパティが適用されない

文書番号 : 25516     文書種別 : 制限事項     最終更新日 : 2008/03/13
文書を印刷する
対象製品
InputMan for .NET 4.0J Windows Forms Edition
発生環境
動作環境と同じ
詳細
この現象はComboコントロールで発生します。以下の条件を満たすとき、コントロールがフォーカスを失った場合でも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;
      }
    }
  }
}

この文書は、以前は次のFAQ IDで公開されていました : 7400