c#在父視窗中呼叫子視窗的過程() 收藏
c#在父視窗中呼叫子視窗的過程:
1、 建立子視窗物件
2、 顯示子視窗物件
筆者的程式中,主窗體mainfrm通過選單呼叫子視窗childfrm。在窗體中定義了子視窗物件,然後在選單項點選事件中,加入了如下**來建立和顯示子視窗:
private childfrm mychildfrm = null; //定義子視窗物件
private void openchildfrmtoolstripmenuitem_click(object sender, eventargs e)
...當點選選單中的openchild項時,建立了子視窗並顯示在最前面。此時如果關閉子視窗再點選選單開啟,不會有問題。但是如果子視窗沒有關閉的情況下,再次點選選單中的openchild項,則會再建立乙個子視窗。兩個子視窗具有相同的內容,這不是我們所希望看到的。
為此,對選單項點選事件做如下改進:
private void openchildfrmtoolstripmenuitem_click(object sender, eventargs e)
...else
...}
這樣修改的目的是:當子視窗物件存在時,直接顯示子視窗。當子視窗不存在時,建立子視窗,然後再顯示。
現在來檢驗效果:當第一次點選openchild選單項時,建立子視窗並正確顯示。不關閉子視窗的情況下再點選openchild選單項,子視窗只顯示了乙個,說明按預期工作了。現在,我們關閉子視窗,再點選openchild選單項,程式在執行到下面這個語句時出現「未處理 objectdisposedexception」異常。
if(mychildfrm != null)
else
...}
前面這是按邏輯的方式進行思考的,顯示子視窗和獲得焦點兩行是重複的,兩個if語句也可以做一下簡化。指定子視窗和父視窗的父子關係。最後的結果是這樣:
private void openchildfrmtoolstripmenuitem_click(object sender, eventargs e)
...mychild..mdiparent = this; //建立父子關係
mychildfrm.show(); //顯示子視窗
mychildfrm.focus(); //子視窗獲得焦點
}這樣,就能夠如我們如願般呼叫子視窗了。
C Socket連線 無法訪問已釋放的物件
在進行socket長連線時,若伺服器或客戶端出現異常時,另外一端對socket對話進行操作時,程式會出現無法訪問已釋放的物件的問題。例如客戶端出現問題主動斷開socket時,當伺服器操作socket時,比如主動斷開socket會話,那麼程式會出現 無法方位已釋放的物件 是由於客戶端的原因導致伺服器和...
Google的Hosts無法訪問
今天,多個google在國dnnevlu內的hosts的ip位址失效,其ip位址無法訪問,導致的現象是,使用者無法訪問google的所有服務,包括搜尋和gmail郵箱。眾所周知,如果google搜尋不使用hosts的話,會不太穩定,經常無法訪問,很多詞,甚至連 釣魚島 都無法搜尋,而使用hosts之...
無法訪問內網WEBServices服務的問題
公司有一伺服器,內網位址,通過路由器做了nat對映,對應了乙個外網ip。伺服器上部署了乙個webservice應用,用的是axis2框架。結果別人訪問這台伺服器的時候,獲取到的axis2自動生成的wdsl文件 即通過url 獲取 裡面寫的服務位址是這台伺服器的內網位址。對方自動解析wsdl後,用ws...