2013-11-10 5 views
0

В моем главном окне я создаю поток, который выполняет цикл while(). Основные задачи состоят из двух частей: получение данных из сокета и их отображение в графическом интерфейсе.Как показать данные по форме второго окна?

Теперь мне нужно показать данные в другом окне одновременно. Поэтому я создаю его сначала, как показано ниже.

ShowForm showForm = new ShowForm(); 

public MainWindow() 
{ 
    InitializeComponent(); 

    mainThread(); 

    showForm.Show(); 
} 

и послать данные к ShowForm, как показано ниже: (coordinateValue генерируется внутри главного окна)

showForm.setter(coordinateValue); 

И в коде ShowForm.Designer.cs:

int xValue; 

public void setter(int val) 
{ 
    xValue = val; 
} 

Теперь я не знаю, как неоднократно показывать xValue в showForm (нужно обновлять своевременно), например textBox или конвертировать xValue для координации и отображения его на pictureBox. И в то же время цикл while while() главного окна должен продолжать получать данные и показывать их в своем графическом интерфейсе.

Может ли кто-нибудь помочь? Благодаря!

+0

Возможно, это может вам помочь. http://stackoverflow.com/questions/17811112/transfer-numbers-in-textbox-to-labels-in-another-form-c-sharp-windows-forms – C0d1ngJammer

ответ

0

Вы можете создать мероприятие в своем MainWindow. И подпишитесь на это событие в своем ShowForm.

Чем бы ни изменялись ваши данные, MainWindow должен поднять это событие. Просто помните, что если вы получите данные в другом потоке, вы не можете просто передать его графическому интерфейсу, который работает в основном потоке. В этом случае вы захотите использовать диспетчер.

0

Возможно, вы захотите использовать класс Timer. Он может выполнять методы (Tick event) равномерно.

0

Я написал образец, который объясняет, как передавать данные из одной формы в другую с помощью события. Если он работает в другом потоке, вы должны использовать метод Invoke в своем элементе управления для предотвращения ошибок.

public partial class AdditionalForm : Form 
{ 
    private Label l_dataToShow; 

    public Label DataToShow { get { return l_dataToShow; } } 

    public AdditionalForm() 
    { 
     InitializeComponent(); 

     SuspendLayout(); 
     l_dataToShow = new Label(); 
     l_dataToShow.AutoSize = true; 
     l_dataToShow.Location = new Point(12, 9); 
     l_dataToShow.Size = new Size(40, 13); 
     l_dataToShow.TabIndex = 0; 
     l_dataToShow.Text = "Data will be shown here"; 
     Controls.Add(l_dataToShow); 
     ResumeLayout(); 
    } 
} 

public partial class MainForm : Form 
{ 
    private AdditionalForm af; 
    public MainForm() 
    { 
     InitializeComponent(); 

     SuspendLayout(); 
     txtbx_data = new TextBox(); 
     txtbx_data.Location = new System.Drawing.Point(12, 12); 
     txtbx_data.Name = "txtbx_data"; 
     txtbx_data.Size = new System.Drawing.Size(100, 20); 
     txtbx_data.TabIndex = 0; 
     Controls.Add(txtbx_data); 
     ResumeLayout(); 

     txtbx_data.TextChanged += new EventHandler(txtbx_data_TextChanged); 
     af = new AdditionalForm(); 
     af.Show(); 
    } 
    /// <summary> 
    /// The data that contains textbox will be transfered to another form to a label when you will change text in a textbox. You must make here your own event that will transfer data. 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void txtbx_data_TextChanged(object sender, EventArgs e) 
    { 
     af.DataToShow.Text = txtbx_data.Text; 
    } 
} 
Смежные вопросы