2009-09-16 4 views
0

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

Любые подсказки?

ответ

3

Добавить общественную собственность на главной форме

public bool IsDirty 
{ 
    get;set; 
} 

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

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

0

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

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

// 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 и получите доступ к нему в вашей стартовой форме.

0

Вот мое предложение: место объекта недвижимости 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;} 

} 
Смежные вопросы