簡體   English   中英

C#WinForms面板問題

[英]C# WinForms Panel Problem

我有一個煩人的問題 - 我想使用帶有圖像的列表視圖作為菜單。 假設列表視圖包含3個“圖像”。

  • 圖1.)“主要”
  • 圖2.)“選項”
  • 圖3.)“雜項”

現在,當我單擊“Main”圖像時,我將顯示“Main”面板,同樣顯示“Options”圖像,其中我顯示“Options”面板。 但這是煩人的部分。 我的表格上有3個面板。 因此,每當我想編輯一個面板時,我必須調整其他兩個面板的大小,以便我可以編輯第一個面板,因為它們都被拋在窗體上。 編輯面板真的很煩人。

是否有某種控件相當於wxWidgets wxListBook控件? 或者有人知道如何解決這個問題嗎? 我在問設計時間

謝謝!

我假設你在談論在設計時編輯面板而不是運行時間。 只需將所有面板設置為相同尺寸,將它們放在彼此的頂部,當您命名它們時,請確保它們都具有相同的前綴。 選擇頂部顯示的面板,如果它不是您想要的面板,請使用“屬性”窗口頂部的下拉列表選擇所需的面板,然后右鍵單擊突出顯示的Panel夾點(移動和調整大小) thingys)並選擇'BringToFront'。

您可以只顯示當前項面板並隱藏其他面板。 在表單上,​​添加一個空面板,它是列表視圖項面板的容器。

private Panel container;

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    //get the item panel associated with the current selection.
    Panel itemPanel = GetItemPanelFromSelection(); 

    container.Controls.Clear();
    container.Controls.Add(itemPanel);
    itemPanel.Dock = DockStyle.Fill;
}

在個人情況下,我會為您想要的每種類型的面板創建一個用戶控件。 優點是您可以輕松編輯它們。 之后,您可以使用上面相同的代碼。

我以前做過這個 - 我只是讓窗戶足夠大以適應所有面板。 在運行時,我隱藏除默認面板之外的所有面板,並將它們的位置設置為相等。 另外,我將父窗口(或控件)的大小設置為我想要的大小,使得一個面板非常適合窗口。 您的選擇方法(單擊圖像)似乎沒問題,因為您將檢測到單擊了哪個圖像,並顯示/隱藏相應的面板。

它有點笨重,但在某些情況下它運作得很好。 這適用於您希望在設計時查看所有面板但僅在運行時看到一個面板的應用程序。 因此,使用Visual Studio的內置本地化工具將繼續工作。

這是我從項目中復制的一些示例代碼。 這實際上是一個設置窗口,我在其中選擇要從TreeView查看的面板。

Width = 640;  // set the size of the form, as it's larger in Designer mode
Height = 480;

simulationPanel.Visible = false;   // hide all panels, and set them to be top-left
simulationPanel.Top = 0;           // relative to their parent control
simulationPanel.Left = 0;

delaysPanel.Visible = false;
delaysPanel.Top = 0;
delaysPanel.Left = 0;

occurrencesPanel.Visible = false;
occurrencesPanel.Top = 0;
occurrencesPanel.Left = 0;

languagePanel.Visible = false;
languagePanel.Top = 0;
languagePanel.Left = 0;

然后,要選擇面板,您可能會執行以下操作:

private void ShowPanel(string name)
{

     // its easy to just hide all panels again if one is currently visible
     simulationPanel.Visible = false;
     delaysPanel.Visible = false;
     occurrencesPanel.Visible = false;
     languagePanel.Visible = false;

     if (name == "language")
     {
          languagePanel.Visible = true; 
     } else if (name = "delays")
     {
          delaysPanel.Visible = true;
     }
     ... etc
}

要在Visual Studio中編輯面板,請考慮將面板本身構建為自定義控件 - 並且可能讓它們從公共基本類型繼承。 然后他們每個人都有自己的設計師窗口。

至於菜單,如何將所有面板全尺寸設置為完全重疊? 畢竟,您可以將控件疊加在一起。 然后,只要用戶進行菜單選擇,您就可以調用.BringToFront()

創建自己的TabControl后代,如下所示。 這段代碼來自這里

using System;
using System.Windows.Forms;

public class MyTabControl : TabControl {
    protected override void WndProc(ref Message m)
    {
        // Hide tabs by trapping the TCM_ADJUSTRECT message
        if (m.Msg == 0x1328 && !DesignMode)
            m.Result = (IntPtr)1;
        else
            base.WndProc(ref m);
    }
}

為您提到的每個菜單面板創建一個標簽頁。 在設計時,您可以通過單擊相應的標簽頁標題選項卡輕松切換面板。 將每個菜單項與標簽頁相關聯,以便在運行時,無論何時選擇菜單項,都可以激活/選擇相應的標簽頁以顯示預期的面板。 在運行時,標簽頁眉將不可見。 我測試了上面的,它的工作原理。

或者,您可能會發現一個選項卡控件,它具有內置支持以隱藏選項卡標題。 例如,我使用DevExpress WinForm控件套件中提供的選項卡控件 ,它支持隱藏標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM