1. 程式人生 > >動態新增控制元件並顯示滾動條

動態新增控制元件並顯示滾動條

        今天做一個功能,一個LinkLabel上顯示資訊為“ 附件('附件個數')”,並在滑鼠指標移動到此LinkLabel上的時候彈出一個框依序顯示相應數量的LinkLabel,把對應附件名稱繫結到LinkLabel上,點選LinkLabel開啟對應附件。本來之前是用的ToolTip實現附件名稱的依序顯示,但是後來需求變動,要求實現上述功能。其他功能都已經實現但是在動態新增LinkLabel並顯示滾動條的時候遇到了問題,首先是動態新增LinkLabel,我把程式碼簡化了一下,現在的附件名稱都放在ArrayList1中,這裡之前的程式碼是:

            for (int i = 0; i < ArrayList1.Count; i++)
            {
                LinkLabel ll = new LinkLabel();
                ll.Text = (i + 1).ToString() + "、" + ArrayList1[i].ToString();
                ll.Dock = DockStyle.Top;
                panel1.Controls.Add(ll);
            }

        執行後,發現附件名稱倒序排列了,而且沒有滾動條顯示。沒有滾動條顯示是正常的,改成如下程式碼後滾動條顯示:

            panel1.AutoScroll = true;
            for (int i = 0; i < ArrayList1.Count; i++)
            {
                LinkLabel ll = new LinkLabel();
                ll.Text = (i + 1).ToString() + "、" + ArrayList1[i].ToString();
                ll.Dock = DockStyle.Top;
                panel1.Controls.Add(ll);
            }

        現在就是名稱倒序顯示的問題了,試著把ll.Dock = DockStyle.Top改成ll.Dock = DockStyle.Bottom,名稱正序顯示,但是想到一個問題:如果附件數很少,panle1的大小不變的話,LinkLabel就都在底部了,這個問題可以通過動態設定panel1的高度來解決,得到LinkLabel的高度為23,那麼改為如下程式碼即可:

            panel1.Height = ArrayList1.Count * 23;
            for (int i = 0; i < ArrayList1.Count; i++)
            {
                LinkLabel ll = new LinkLabel();
                ll.Text = (i + 1).ToString() + "、" + ArrayList1[i].ToString();
                ll.Dock = DockStyle.Bottom;
                panel1.Controls.Add(ll);
            }

        現在的問題是如果附件數量比較大,那麼panel1的高度會很高,這樣看著不舒服,而且根據顯示器的解析度設定,當附件達到一定數量時會顯示不全,那麼還是需要滾動條。那麼,如何讓附件正序顯示並顯示滾動條呢,改為如下程式碼即可:

            panel1.AutoScroll = true;
            for (int i = 0; i < ArrayList1.Count; i++)
            {
                LinkLabel ll = new LinkLabel();
                ll.Text = (i + 1).ToString() + "、" + ArrayList1[i].ToString();
                ll.Dock = DockStyle.Top;
                panel1.Controls.Add(ll);
                ll.BringToFront();
            }

        可以自行設定panel1的長寬,這不在文章討論範圍,就不贅述。關鍵程式碼是ll.BringToFront();,把這條程式碼放在panel1.Controls.Add(ll);之後即可正序排列,加上前面的ll.Dock = DockStyle.Top就不會出現附件數量少的時候顯示在panel1底部的問題了。但是這裡要注意的是ll.BringToFront();一定要寫在panel1.Controls.Add(ll);後面,如果寫在前面,附件還是會倒序排列。

        當然,也可以設定LinkLabel的Location值來達到正序排列的要求,但是我感覺設定Dock要方便一點,而且這個問題既然沒有解決,那麼一定是要解決的,所以我一直是用Dock屬性來進行排序的。設定Location來實現正序排序很簡單,我就不多說了。

        另外,我用RichTextBox試了一下,使用以上程式碼只能實現附件的正序排列,滾動條不能出現,即使加上richTextBox1.ScrollBars = RichTextBoxScrollBars.ForcedVertical;這句程式碼,滾動條也是灰色狀態,無法滾動,具體原因待研究。

相關推薦

動態新增控制元件顯示滾動

        今天做一個功能,一個LinkLabel上顯示資訊為“ 附件('附件個數')”,並在滑鼠指標移動到此LinkLabel上的時候彈出一個框依序顯示相應數量的LinkLabel,把對應附件名稱繫結到LinkLabel上,點選LinkLabel開啟對應附件。本來之前

android 動態新增控制元件實現每個子控制元件的點選事件

         需求:我們要點選進入一家店鋪,根據不同的店鋪,顯示不同條數的子條目 如:消毒間,洗菜間等。。。這些都是或多或少的,所以需要動態新增:    首先自定義View(linearLayout): package cn.qust.fang.widget; imp

HorizontalScrollView動態新增控制元件可以移動到點選的控制元件的位置

點選“第4期”後的效果圖為 程式碼: mScrollView = (HorizontalScrollView)findViewById(R.id.scroll_view); mLinear = (LinearLayout)findViewById(R.id.line

安卓動態新增控制元件_向LinearLayout中增加控制元件

背景:        在有些情況下,需要通過程式碼自動向頁面內增加控制元件,而不是事先在xml檔案中寫好。本文介紹向LinearLayout中增加控制元件。 解決方案:     1.新增單個控制元件樣例       LinearLayout layout = find

winform 中panel動態新增控制元件座標原點問題

問題描述 最近在寫winform程式的時候遇到一個小問題,目標效果是類似QQ的聊天對話方塊,每傳送一條訊息會在介面上顯示傳送方的頭像、傳送氣泡、以及訊息內容,如圖 按照原來的想法,每條訊息都是一個獨立的panel,然後在主介面的大的panel中add每一

Android動態新增控制元件約束位置

用LayoutParams: RelativeLayout insertLayout = (RelativeLayout)view1.findViewById(R.id.screen);//screen是一個RelativeLayout 佈局的id ImageView imgApple2 = new

C#解決動態新增控制元件時,控制元件閃爍的問題

近段時間一直用C#來做開發,但是C#控制元件太多或者動態新增的控制元件,控制元件一直一閃一閃的,始終不知道什麼問題。 各種度娘,沒去谷哥,因為上不去,你懂得。 翻遍了很多資料,都在說雙快取,還有什麼圖片什麼的,各種程式碼嘗試無效,之後看到CSDN一個帖子,看完之後發現這一段程式碼真的解決了閃爍的問題!原理我還

Dev 控制元件treelist等滾動使用

使用dev的treelist控制元件,系統預設的滾動條太細太小,當資料很多時候,拖動滾動條的時候使用者使用極其不方便。這個問題通過設定dev的窗體面板顯示即可完成。因為treelist控制元件的滾動條隨著不同窗體顯示風格變化的,可通過面板進行顯示,如下: 1、引入DevEx

AJAX——動態新增控制元件(複選框)

需求:使用者根據自己的需求,配置下拉框中的欄位。 解決思路:使用者配置下拉框中的欄位(例如:高階查詢,基礎資訊),動態新增複選框控制元件。使用者再對複選框進行勾選,最終結果是,基礎資訊中的,高階查詢下拉框中為使用者勾選的欄位。 前臺程式碼: <asp:Content

Ext.NET -- 後臺動態新增控制元件

protected void btnAddItem_Click(object sender, EventArgs e) { int index = this.GetIndexVal(); //Ext.

JS+jQuery+Easyui實現動態新增控制元件及賦值

背景:某天陽光明媚的午後,和小夥伴們完一個遊戲,在一個黑箱中放了紅橙黃綠青藍紫七種顏色的球,我讓幾名玩遊戲的小夥伴分別從黑箱裡抓球,並且統計他們都抓了哪種顏色的球。。最後的結果是,有抓的多,有抓的少,抓到的顏色也不一樣。 那麼問題來了!! 如果讓你做一個統計軟體怎麼記錄

QTableWidget設定網格線粗細 單元格中新增控制元件居中

通過網上搜集資料整理,方便自己和他人以後查閱 tableWidget =newQTableWidget(3,2); tableWidget->setStyleSheet("QTableWidget::item{border:1pxsolid;}"); // //

Qt動態建立控制元件實現佈局

最近搞的一些需求有相關的設計,從網上找來一段程式碼,受到一些啟發,記下來備用。 有相關需求的可以參考 直接上程式碼: if(icreateControlNum<=display_num_Line) { rownum=1; display_num_Line=icr

Codejock Xtreme ToolkitPro v15.0 在HOOK控制元件後導致滾動不正常bug及修復

介面庫的原理先搞清楚就好辦了,大部分都是採用HOOK WinProc來實現介面美化,所有先從HOOK開始入手,很多問題慢慢就清晰了... 這個深坑有幾個月了,一直沒閒功夫去認真閱讀它的整個程式碼框架,今天翻閱了一個小時,總算有點頭緒了,只需要一行程式碼即可解決~~ 當然,它

GridLayout上動態新增控制元件

Android上GridLayout和java上的感覺差不多,但是在添加布局內部新增控制元件就不是那麼容易了。 grid = (GridLayout)findViewById(R.id.grid); //獲取GridLayout控制元件 int count=1;

Android開發FrameLayout動態新增控制元件位置問題

       首先FrameLayout的子控制元件預設都是從左上角顯示的,還有最後新增的在最前面顯示。         一般是對FrameLayout.LayoutParams params進行操作

WPF:動態載入控制元件設定樣式

這個問題想了一下午,網上查找了一些資料。終於解決了。拿出來晒一下,希望能夠幫助到你們。 下面這個例子是動態新增的TextBlock控制元件,面板是StackPanel,如下: TextBlock tb = (TextBlock)XamlToObj("<TextBl

NET上動態增加控制元件,將其排布到最後面

程式碼如下:            GroupBox gbx = new GroupBox();             gbx.Text = DateTime.Now.ToLongTimeString();             gbx.Dock = DockStyle

jQuery EasyUI動態新增控制元件或者ajax載入頁面後不能自動渲染問題的解決方法

現象:        AJAX返回的html無法做到自動渲染為EasyUI的樣式.比如:class="easyui-layout" 等 處理方法:       在html片段載入完畢後使用 Js程式碼   $.parser.parse(context)        即可重新渲染。 實現

【JavaScript】動態新增控制元件

<script type="text/javascript"> //<!--動態新增檔案瀏覽框函式--> function insertElement() {