1

所以我的主窗体上有 2 个控件,一个自定义 hexbox 控件和一个richtextbox,如下图所示(它不会让我发布图像,所以必须点击链接)。我想做的是根据用户在 hexbox 控件中单击的位置,右侧的富文本框将滚动到关联的行。

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

我当前遇到的问题是处理 hexbox 点击的代码包含在一个单独的类(hexbox.cs)中,因此我无法获取点击的位置并滚动到包含在 mainform 类中的richtextbox。我试图创建一个新的主窗体实例来访问richtextbox,但显然这个结果是创建一个没有原始内容的新richtexbox。

这是 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 - 或类似事件) - 甚至使用 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();

  }
}
于 2012-04-29T14:55:49.153 回答