2012-04-29 16 views
1

私はメインフォーム、カスタムhexboxコントロール、richtextboxの2つのコントロールを下の図のように持っています(リンクをたどる必要があるので画像を投稿できません)。私がしたいのは、ユーザーがhexboxコントロールでクリックした場所に依存し、右側のリッチテキストボックスは関連する行にスクロールします。syncカスタムコントロールとrichtextbox C#

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

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

相続人は、その任意のヘルプ場合はマウスクリックを扱うhexboxクラスのコード:私はきちんとundersntand場合

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(); 
     }   
    } 

答えて

0

が、これは役立つはずです。

hexboxクラスにアクセスできる場合は、イベント(MouseClickなど)を公開することができます。また、選択した行をargs prividigで独自に作成することもできます。

ユーザーがあなたのフォームクラスをクリックすると通知されます。

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(); 

    } 
} 
関連する問題