从VB.NET中的另一个类向RichTextBox附加文本

时间:2013-08-27 07:58:55

标签: vb.net winforms append richtextbox

我有一个Form(ClientGUI),其RichTextBox。我想要做的是从另一个类(MyQuickFixApp)中的Sub追加文本到这个RichTextBox。我知道Sub工作,因为调试器会通过,但它不会将文本附加到我的RichTextBox

我该怎么做?

谢谢你的帮助!


ClientGUI.vb:

Imports QuickFix
Imports QuickFix.Transport
Imports QuickFix.Fields

Public Class ClientGUI
    Dim initiator As SocketInitiator

    Public Sub ClientGUI_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim filename As String = "Resources/initiator.cfg"
        Dim settings As New SessionSettings(filename)
        Dim myApp As New MyQuickFixApp()

        Dim storeFactory As New FileStoreFactory(settings)
        Dim logFactory As New FileLogFactory(settings)

        initiator = New SocketInitiator(myApp, storeFactory, settings, logFactory)
    End Sub

    Public Sub ConnectToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ConnectToolStripMenuItem.Click
        ToolStripDropDownButton1.Text = "Establishing connection..."
        ToolStripDropDownButton1.Image = My.Resources.Connecting
        initiator.Start()
    End Sub

    Public Sub DisconnectToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DisconnectToolStripMenuItem.Click
        ToolStripDropDownButton1.Text = "Disconnecting..."
        ToolStripDropDownButton1.Image = My.Resources.Disconnecting
        initiator.Stop()
    End Sub
End Class

MyQuickFixApp.vb:

Imports QuickFix
Imports QuickFix.Transport
Imports QuickFix.Fields

Public Class MyQuickFixApp
    Inherits MessageCracker : Implements IApplication

    Dim _session As Session = Nothing

    Public Sub FromAdmin(message As Message, sessionID As SessionID) Implements IApplication.FromAdmin
        ClientGUI.RichTextBox1.AppendText("")
        ClientGUI.RichTextBox1.AppendText("IN (ADMIN): " + message.ToString())

        Try
            Crack(message, sessionID)
        Catch ex As Exception
            ClientGUI.RichTextBox1.AppendText("")
            ClientGUI.RichTextBox1.AppendText("==Cracker exception==")
            ClientGUI.RichTextBox1.AppendText(ex.ToString())
            ClientGUI.RichTextBox1.AppendText(ex.StackTrace)
        End Try
    End Sub

    Public Sub FromApp(message As Message, sessionID As SessionID) Implements IApplication.FromApp
        ClientGUI.RichTextBox1.AppendText("")
        ClientGUI.RichTextBox1.AppendText("IN (APP): " + message.ToString())

        Try
            Crack(message, sessionID)
        Catch ex As Exception
            ClientGUI.RichTextBox1.AppendText("")
            ClientGUI.RichTextBox1.AppendText("==Cracker exception==")
            ClientGUI.RichTextBox1.AppendText(ex.ToString())
            ClientGUI.RichTextBox1.AppendText(ex.StackTrace)
        End Try
    End Sub

    Public Sub ToApp(message As Message, sessionId As SessionID) Implements IApplication.ToApp
        Try
            Dim possDupFlag As Boolean = False
            If (message.Header.IsSetField(Tags.PossDupFlag)) Then
                possDupFlag = Converters.BoolConverter.Convert(message.Header.GetField(Tags.PossDupFlag))
            End If
            If (possDupFlag) Then
                Throw New DoNotSend()
            End If
        Catch ex As FieldNotFoundException
            ClientGUI.RichTextBox1.AppendText("OUT (APP): " + message.ToString())
        End Try
    End Sub

    Public Sub OnCreate(sessionID As SessionID) Implements IApplication.OnCreate
        '_session = Session.LookupSession(sessionID)
        ClientGUI.RichTextBox1.AppendText("Session created - " + sessionID.ToString())
    End Sub

    Public Sub OnLogon(sessionID As SessionID) Implements IApplication.OnLogon
        ClientGUI.RichTextBox1.AppendText("Logon - " + sessionID.ToString())
        ClientGUI.ToolStripDropDownButton1.Text = "Connected"
        ClientGUI.ToolStripDropDownButton1.Image = My.Resources.Connected
        'MsgBox("onlogon")
    End Sub

    Public Sub OnLogout(sessionID As SessionID) Implements IApplication.OnLogout
        ClientGUI.RichTextBox1.AppendText("Logout - " + sessionID.ToString())
        ClientGUI.ToolStripDropDownButton1.Text = "Disconnected"
        ClientGUI.ToolStripDropDownButton1.Image = My.Resources.Disconnected
    End Sub

    Public Sub ToAdmin(message As Message, sessionID As SessionID) Implements IApplication.ToAdmin
        ClientGUI.RichTextBox1.AppendText("OUT (ADMIN): " + message.ToString())
    End Sub

    Public Sub OnMessage(message As FIX42.Heartbeat, sessionID As SessionID)
        ClientGUI.RichTextBox1.AppendText("HEARTBEAT")
    End Sub
End Class

2 个答案:

答案 0 :(得分:1)

我想MyQuickFixApp类中的代码只能访问ClientGUI默认实例,而不是每次写{{1}时实际运行的实例}}

有关默认实例的更多信息,请参阅此主题Why is there a default instance of every form in VB.Net but not in C#?,这是您应该避免使用的内容。

所以你可以在ClientGUI.(...)类构造函数中添加一个参数:

MyQuickFixApp

然后,在 Public Class MyQuickFixApp Inherits MessageCracker : Implements IApplication Dim _clientGUI As ClientGUI = Nothing Public Sub New(cltGui As ClientGUI) _clientGUI = cltGui End sub (...) End class 班级中将所有MyQuickFixApp替换为ClientGUI.(...),以确保能够访问正确的实例。

最后,在_clientGUI.(...)中初始化您的MyQuickFixApp课程,如下所示:

ClientGUI

请注意,此代码只能访问Dim myApp As New MyQuickFixApp(me) 事件中类的方法。如果您希望稍后从Form_Load表单访问此变量,则应在类中声明并在form_load中初始化该变量。

ClientGUI

答案 1 :(得分:0)

表格

    private void button3_Click(object sender, EventArgs e)
    {
        TestClass tc = new TestClass();

        tc.addComment(richTextBox1);
    }

在课堂上

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

public class TestClass
{
    public void addComment(RichTextBox rt) 
    {
        rt.Text = rt.Text + Environment.NewLine + "My Dynamic Text";
    }
}

你也可以在VB.net中做到这一点