1

そのため、メイン フォームに 2 つのコントロール、カスタム hexbox コントロール、および以下の図のようなリッチテキスト ボックスがあります (画像を投稿できないため、リンクをたどる必要があります)。私がやりたいことは、ユーザーが hexbox コントロールでクリックした場所に応じて、右側のリッチ テキスト ボックスが関連する行にスクロールすることです。

http://i.stack.imgur.com/8PfRt.jpg

私が抱えている現在の問題は、hexbox のクリックを処理するコードが別のクラス (hexbox.cs) に含まれているため、クリックの場所を取得して関連する行にスクロールできないことです。 mainform クラスに含まれる richtextbox。リッチテキストボックスにアクセスするためにメインフォームの新しいインスタンスを作成しようとしましたが、明らかに、元のコンテンツを持たない新しいリッチテキストボックスが作成されます。

ヘルプがあれば、マウスクリックを処理する hexbox クラスのコードを次に示します。

void SetCaretPosition(Point p)
    {
        System.Diagnostics.Debug.WriteLine("SetCaretPosition()", "HexBox");

        if (_byteProvider == null || _keyInterpreter == null)
            return;

        long pos = _bytePos;
        int cp = _byteCharacterPos;

        if(_recHex.Contains(p))
        {
            BytePositionInfo bpi = GetHexBytePositionInfo(p);
            pos = bpi.Index;
            cp = bpi.CharacterPosition;

            SetPosition(pos, cp);

            ActivateKeyInterpreter();
            UpdateCaret();
            Invalidate();
        }
        else if(_recStringView.Contains(p))
        {
            BytePositionInfo bpi = GetStringBytePositionInfo(p);
            pos = bpi.Index;
            cp = bpi.CharacterPosition;

            SetPosition(pos, cp);

            ActivateStringKeyInterpreter();
            UpdateCaret();
            Invalidate();
        }         
    }
4

1 に答える 1

0

私が正しく理解していれば、これは役立つはずです。

hexbox クラスにアクセスできる場合は、イベント (MouseClick など) を公開したり、選択した行を引数に指定して独自のイベントを作成したり、フォームでこのイベントをサブスクライブしたりできます。

次に、ユーザーがフォーム クラスをクリックすると通知されます。

class HexBox : UserControl{

   // .. 
}

public class MyForm :Form{
  public MyForm(){
    HexBox hexBox = new HexBox();
    Controls.Add(hexBox);
    hexBox.MouseDown += (sender, args) =>{
       // call your scroll to function 
    };

    InitializeComponent();

  }
}
于 2012-04-29T14:55:49.153 に答える