2012-06-01 50 views
0

我在對象和引用之間有點迷路了。我正在用一些不同的類和winForms構建一個小項目。對象和引用

這是我的項目的簡短描述:我有一個MainForm,當我點擊'添加新電影'按鈕時,MovieForm打開我輸入電影信息的位置。當我點擊'保存'按鈕時,我在MovieForm中創建信息的NewMovie對象。

下一步是將此NewMovie對象保存到文件中。而在這裏,我有點迷失在如何從另一個類的其他地方獲取來自此NewMovie對象的數據,比如MovieManager,然後我使用FileManager的對象來保存數據?

在MainForm中我有這樣的代碼,以檢測當按鈕「添加新電影」點擊在MovieForm:

MovieForm movieForm = new MovieForm(); 
if (movieForm.ShowDialog() == DialogResult.OK) 
{ 
Do something here? 
} 

我能達到或路過這裏的新MovieForm對象?那我該怎麼辦?在我的項目中,我也有一個MovieManager。一種方法是將對象傳遞給該類?我應該在MovieForm中創建MovieManager對象並在創建NewMovie對象後以這種方式傳遞數據嗎?

有點幫助和想法!謝謝!

+1

http://stackoverflow.com/questions/280579/how-do-i-pass-a-value-from-a-child-back-to-the-parent-form –

回答

2

ShowDialog完成後,對movieForm的引用仍然有效。因此,你可以在你的MovieForm創建一個公共財產:

class MovieForm { 
    ... 
    public NewMovie Result { get; private set; } 
    ... 
} 

你在你的MoveForm設置這個值(當窗體關閉或當一些保存按鈕被按下),然後你就可以在你的主要閱讀形成並傳遞給您的MovieManager:

MovieForm movieForm = new MovieForm();  
if (movieForm.ShowDialog() == DialogResult.OK)  
{  
    NewMovie newMovie = movieForm.Result; 
    myMovieManager.CreateNewMovie(newMovie); 
}  
+0

嗨,我收到了MovieForm中的屬性的錯誤消息:不一致的可訪問性:屬性類型'MyMovies.NewMovie'比屬性'MyMovies.MovieForm.Result'更難以訪問? –

+0

@ 3D-kreativ:將屬性從'public'改爲'internal',或將'public'放在'NewMovie'類聲明的前面。 – Heinzi

+0

與公衆一起工作更好! –

0

在您的MovieForm類中創建一個屬性,並在創建實例時傳遞它的值。

+0

你好,很容易瞭解你是否添加了一些代碼? –

0

您應該從MovieForm中返回新創建的Movie實例並將其存儲在管理器中。

public class MovieManager 
{ 
    List<Movie> movies; 

    public void AddMovie(Movie movie) 
    { 
    movies.Add(movie); 
    } 

    public Save() 
    { 
    } 
} 

public class Movie 
{ 
    public string Name; 
} 

public class MainForm 
{ 
    MovieManager manager; 

    private void NewMovieClick(...) 
    { 
    using(var form = new MovieForm()) 
    { 
     if(form.ShowDialog(this) == DialogResult.OK) 
     { 
     manager.Add(from.Movie); 
     } 
    } 
    } 
} 

public class MovieForm 
{ 
    public Movie Movie; 
}