//下面是在主程式 里寫的部分!
this.f2.tabPage1.Controls.Add(A);//在f2表單的tabPage1上面添加A視窗
A.Show();//此處A表單show不出來,需要再把f2再Show一遍就能再tabPage1上顯示A視窗了,問題是打開了兩個f2表單;有大神有好的方法 幫 忙解決一下嗎,在線等非常感謝!!!
//f2.Show();
uj5u.com熱心網友回復:
A的 TopLevel有沒有設成false?uj5u.com熱心網友回復:
設成false也不行,嘗試了很多方法都不管用!uj5u.com熱心網友回復:
@Bridge_go A.TopLevel = false;A.Select(); //激活
A.Refresh(); //重繪都不行
實在是搞不定了,請大神幫幫忙
uj5u.com熱心網友回復:
TabControl 的 TabPage 里展示表單這種操作我們已使用 N 多年了,沒有遇到你的情況。把代碼貼出來,大家分析一下。uj5u.com熱心網友回復:
/// 根據對應的設備物件系結顯示控制元件private void __SelectDeviceAndShow(int nCamID)
{
switch (nCamID)
{
case 0:
{
m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(0, 0);
this.f2.tabPage1.Controls.Add(m_listCCamerInfo[nCamID].m_objImageShowFrom); //在f2表單的tabPage1上添加
//“m_listCCamerInfo[nCamID].m_objImageShowFrom”視窗
m_listCCamerInfo[nCamID].m_objImageShowFrom.Show(); //此處A表單show不出來,需要再把f2再Show一遍就能再tabPage1上顯示A視窗了,
//問題是打開了兩個f2表單;有大神有好的方法
//幫忙解決一下嗎,在線等非常感謝!!!
//f2.Show();
}
break;
case 1:
{
m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(390, 0);
this.f2.tabPage1.Controls.Add(m_listCCamerInfo[nCamID].m_objImageShowFrom);
m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
}
break;
case 2:
{
m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(0, 330);
this.f2.tabPage1.Controls.Add(m_listCCamerInfo[nCamID].m_objImageShowFrom);
m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
}
break;
case 3:
{
m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(390,330);
this.f2.tabPage1.Controls.Add(m_listCCamerInfo[nCamID].m_objImageShowFrom);
m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
}
break;
default:
break;
}
}
uj5u.com熱心網友回復:
@datafansbj 我的代碼是操作相機拍照的,這段代碼__SelectDeviceAndShow 是在對應表單位置顯示相機視頻控制元件的,麻煩大神幫忙分析一下,非常感謝!uj5u.com熱心網友回復:
this 是一個表單吧?this 上有 f2 表單,f2 表單上有 TabControl,f2 的 TabControl 的某個 TabPage 里有表單 A。你將表單 A 換成非表單控制元件比如 Label 試試能否顯示出來。這類問題一般是沒有初始化好表單造成的,可加一句:表單A.Visible= true。
uj5u.com熱心網友回復:
m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;這句去掉試試
uj5u.com熱心網友回復:
@datafansbj 嘗試了添加 Label 也顯示不出來,表單設定 A.Visible= true,也不行,還是需要在把f2表單Show一遍才能顯示!uj5u.com熱心網友回復:
@Bridge_go 去掉之后無法,運行提示無法將頂級控制元件添加到控制元件。uj5u.com熱心網友回復:
TopLevel設成falseuj5u.com熱心網友回復:
@Bridge_go 設定完之后也不行。uj5u.com熱心網友回復:
你把設定后的代碼發出來看看uj5u.com熱心網友回復:
case 0:{
//m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
m_listCCamerInfo[nCamID].m_objImageShowFrom.TopLevel = false;
m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(0, 0);
this.f2.tabPage1.Controls.Add(m_listCCamerInfo[nCamID].m_objImageShowFrom);
m_listCCamerInfo[nCamID].m_objImageShowFrom.Visible = true;
m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
//f2.Show();
}
break;
uj5u.com熱心網友回復:
http://blog.csdn.net/w1wqw/article/details/44356439uj5u.com熱心網友回復:
按照你現在這樣代碼肯定是可以的,你現在運行的界面是怎么樣的uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
你的表單嵌套邏輯有點亂,把表單嵌套邏輯清理一下。表單嵌套時,Windows 可能不會自動重繪界面,需要時才執行。有時需要手動強制重繪才行。如 TabPage 這種容器,如果不是首個顯示的頁簽,那么在表單加載(Load)時不會執行自己的 Load 事件,當操作者切換到該頁簽時才會執行自己的 Load 事件。uj5u.com熱心網友回復:
@datafansbj 在主表單里面的TabPage頁添加ImageShowFrom是可以重繪出來的(我截圖了),通過一個checkBox1按鈕打開一個新表單后(新表單中有TabPage頁),然后“打開設備” 把ImageShowFrom添加上去新表單上的TabPage頁就不行了。表單嵌套邏輯該如何修改和清理呢,大神能給點建議嗎,這幾天被這個問題搞的頭都炸了。大神方便加QQ詳聊嗎,幫忙把這個問題解決了,非常感謝,981691561 。
uj5u.com熱心網友回復:
你在把 ImageShowFrom 添加到 TabPage 上之后,手動切換一下這個 TabControl 的 TabPage,再切回來看看。uj5u.com熱心網友回復:
@datafansbj 來回切了很多次都沒有用,uj5u.com熱心網友回復:
你可以單獨撰寫一個簡單的模型用例測驗一下,不使用你源代碼的東西,那里有很多干擾。很可能是其他你沒注意到的代碼導致的。當我們實在找不到問題的原因時,這其實是一個比較有效的方法。uj5u.com熱心網友回復:
@datafansbj 好的,我再試試uj5u.com熱心網友回復:
@datafansbj 簡單的模型嘗試了一下,問題也是一樣的,我截圖給您看效果!
uj5u.com熱心網友回復:
你把你這模型的全部代碼發出來看下uj5u.com熱心網友回復:
TopLevel設成false就ok了uj5u.com熱心網友回復:
模型問題解決了: 是 Form2在兩個地方宣告了,在兩個地方宣告之后需要再show一次,改成全域之后就可以實作了; 又發現模型一個新問題,就是嘗試反過來看看能不能實作的!
uj5u.com熱心網友回復:
有沒有什么方法可以把 Form1 f1 = new Form1();定義成全域變數,讓每個表單都可以呼叫f1,我想是不是就可以解決了。uj5u.com熱心網友回復:
我覺得你的問題根源不在這里,你要顯示的 Form 有多少實體?要顯示的實體是在什么地方 new 出來的?應該只 new 一個實體,然后操作這個實體,不能再去 new 一個新的實體。
uj5u.com熱心網友回復:
你把設定后的代碼發出來看看uj5u.com熱心網友回復:
如何只new一個實體出來,供整個專案使用的方法?uj5u.com熱心網友回復:
WinForm 作為頂層容器,是不允許作為子控制元件,所以TabControl加入Form應該不行。
解決辦法可以用自定義控制元件。
private void button2_Click(object sender, EventArgs e)
{
tabCtl.TabPages.Add("tab" + (tabCtl.TabCount + 1));
TabPage page = tabCtl.TabPages[tabCtl.TabCount - 1];
UserControl1 uc = new UserControl1("我是自定義表單" + tabCtl.TabCount);
uc.Parent = page;
uc.Show();
}


uj5u.com熱心網友回復:
非常感謝大家,把實體改成全域就可以實作了,問題解決了。uj5u.com熱心網友回復:
很好
uj5u.com熱心網友回復:
不錯不錯不錯uj5u.com熱心網友回復:
來學習學習
uj5u.com熱心網友回復:
學習……………………………uj5u.com熱心網友回復:
直接創建一個新表單不就妥了
uj5u.com熱心網友回復:
特別慚愧的是,雖然我很早就知道 GitHub,但是學會逛 GitHub 的時間特別晚。當時一方面是因為菜,看著這種全是英文的東西難受,不知道該怎么去玩,另一方面是一直在搞 ACM,沒有做一些工程類的專案,所以想當然的以為和 GitHub 也沒什么關系(當然這種想法是錯誤的)。
后來自己花了一個星期看完了 Python 的基礎知識,就想著找點專案看一看,學一學,練一練,這個時候我才真正的去了解 GitHub,開始了在 GitHub 的瞎逛之旅,在開始之初,隨之而來的問題是我不知道哪些專案當時還是新手的我,哪些專案是好專案,哪些專案好玩有價值。
雖然現在我已經在 GitHub 上逛的相當流暢,但我還是想如果有一個東西可以收集這些對新手友好的東西,那么我當時可以少走更多的彎路,節省更多的時間吧。
uj5u.com熱心網友回復:
寫的非常好好的很uj5u.com熱心網友回復:
特別慚愧的是,雖然我很早就知道 GitHub,但是學會逛 GitHub 的時間特別晚。當時一方面是因為菜,看著這種全是英文的東西難受,不知道該怎么去玩,另一方面是一直在搞 ACM,沒有做一些工程類的專案,所以想當然的以為和 GitHub 也沒什么關系(當然這種想法是錯誤的)。后來自己花了一個星期看完了 Python 的基礎知識,就想著找點專案看一看,學一學,練一練,這個時候我才真正的去了解 GitHub,開始了在 GitHub 的瞎逛之旅,在開始之初,隨之而來的問題是我不知道哪些專案當時還是新手的我,哪些專案是好專案,哪些專案好玩有價值。
雖然現在我已經在 GitHub 上逛的相當流暢,但我還是想如果有一個東西可以收集這些對新手友好的東西,那么我當時可以少走更多的彎路,節省更多的時間吧。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
原有方案好像是對的,只是控制元件是容器:如果裝入的資料是基本型別,設定好屬性就OK了;如果裝入的是復雜型別,可能還需要.load(); 一下才能使用。uj5u.com熱心網友回復:
是網站設計費了好大勁uj5u.com熱心網友回復:
?????????
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/80437.html
標籤:C#
