Передача переменных из основной формы в форму ввода - PullRequest
0 голосов
/ 16 сентября 2009

У меня простой вопрос. У меня есть основная форма, а затем форма запуска, из которой я могу выбрать новую 3D-модель для создания. При выборе новой 3D-модели из формы запуска я хочу сначала проверить, была ли сохранена предыдущая модель, с которой я работал, или нет. Я просто хочу передать логическое значение из главной формы в форму запуска с помощью делегата, но я не могу получить доступ к главной форме или любой из ее переменных. Я думал, что это будет так же просто, как сказать: frmMain myForm = new frmMain();, но ввод frmMain ничего не показывает в intellisense.

Есть подсказки?

Ответы [ 3 ]

3 голосов
/ 16 сентября 2009

Добавьте публичную собственность в основную форму

public bool IsDirty
{
    get;set;
}

Вы можете получить доступ к this.ParentForm.IsDirty в форме запуска,

не забудьте передать ссылку на основную форму при отображении формы запуска ... startupForm.showDialog(this);

0 голосов
/ 16 сентября 2009

Вот мое предложение: поместите свойство объекта 3DModel в основную форму:

private Model _model;

Объявите вашу форму запуска как диалог (например, OpenFileDialog) и сделайте что-то вроде этого:

public void OpenModel()
{
using(var frm=new StartUpForm())
{
if(frm.ShowDialog()==DialogResult.OK))
{
if(_model.IsDirty)
{
if(MessageBox.Show("Model is changed do you want to save it?","",MessageBoxButtons.YesNo")==DialogResult.Yes)
_model.Save();

_model=frm.SelectedModel;
}
}
}


}

ваша форма запуска должна иметь такой интерфейс:

public interface IStartupForm:IDisposable
{
DialogResult ShowDialog(IWin32Window parent);
Model SelectedModel{get;}

}
0 голосов
/ 16 сентября 2009

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

Вы также можете сделать это следующим образом (наряду с другими способами:)

// This class is mainly used to transfer values in between different components of the system
    public class CCurrent
    {

        public static Boolean Saved = false;


    }

убедитесь, что вы поместили этот класс в пространство имен, доступное для обеих форм.

Теперь В вашей форме frmMain установите значение CCurrent.Saved и получите доступ к нему в форме запуска.

...