2014-10-31 4 views
1

Я хочу выбрать форму своего приложения для редактирования настроек текстового поля в нем. Для этого я использовал Form.ActiveForm. Это отлично работает, когда форма находится на переднем плане, но когда она не выбрана, это больше не работает. Есть ли способ получить текущую форму приложения, даже если он находится в фоновом режиме?C# Выбор формы программы

EDIT: Вот код:

var form = Form.ActiveForm as MainForm; 
if (form != null) 
{ 
    form.txtChatOutput.Text += p.Data[0] + "\r\n"; 
} 

EDIT 2:

Я нашел простое решение. Объявить переменную форму myForm; в классе и в событии Shown вашей формы установите его в Form.ActiveForm.

public partial class Form1 : Form 
{ 
    Form myForm; 
    .... 
    private void Form1_Shown(object sender, EventArgs e) 
    { 
     myForm = Form.ActiveForm; 
    } 
} 

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

+0

Было бы полезно, если бы вы разместили код –

+0

Iterate 'Application.OpenForms', который ищет определенную форму, в которой вы нуждаетесь. – InBetween

ответ

1

В то время как метод, приведенный в Edit 2, будет работать, есть более прямые пути.

public partial class Form2 : Form 
{ 
    Form1 mainFrm; 

    public Form2(Form1 frm) 
    { 
     InitializeComponent(); 
     mainFrm = frm; 
    } 
    ... 
} 

Изменить конструктор формы «ребенок», чтобы принять ARG с указанием владельца/родителей или основную форму и сохранить его как класс вар. Сделайте это для формы, которую всегда должен быть проинформирован о родительской/основной форме. Чтобы использовать форму в обоих направлениях, просто добавьте выше, как перегруженный ctor. С его помощью:

using (Form2 frm = new Form2(this)) 
{ 
    frm.ShowDialog(); 
} 

Если/когда ваше приложение класса приводится, а не форма ведомой, вы можете сделать что-то подобное из Main проходящих основной ссылки формы для этого класса в конструкторе.

+1

Спасибо, это помогло :) –

0

Хотя я не могу полностью понять, что именно вы хотите достичь, вы могли бы взглянуть на

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.findform(v=vs.110).aspx

Например, если у вас есть текстовое поле в форму, вы могли бы сделать STH нравится:

//// Get the form that the TextBox control is contained within. 
Form myForm = textBoxInstance.FindForm(); 

Или, как указано в комментарии, перебрать все OpenForms и получить тот, который вы хотите:

// Loop through all the forms 
foreach (Form form in Application.OpenForms) 
{ 
    // identify the form you want somehow... 
    // example using form name 
    if (form.Name == "myForm") 
     Form myForm = form; 
} 
Смежные вопросы