簡體   English   中英

如何在TabPage標題旁邊顯示ErrorProvider錯誤圖標?

[英]How to show an ErrorProvider error icon next to a TabPage header?

編輯:這不是TabControl C#圖標的重復- 如何? 問題是關於向標簽頁添加圖標。 這里是關於如何將錯誤提供程序錯誤圖標位置更改為標題內而不是標簽頁本身的右側。 此外,錯誤提供程序錯誤圖標具有以下功能:當您將鼠標懸停在其上時,您會看到錯誤文本,如果只是向標題添加圖標,則無法看到該文本。


我有一個帶TabControl的表單。 該表單還有一個ErrorProvider 當我嘗試使用以下代碼時:

errorProvider1.SetError(tabPage1, "error");

錯誤圖標顯示在選項卡頁面的右側,它由選項卡控件本身截斷: 1]

我希望圖標顯示在標簽頁標題旁邊。 這樣的東西(用Photoshop制作):

2]

我不知道從哪里開始,或者如何處理這個問題。

編輯:我有一個類負責向控件添加錯誤,並使用錯誤提供程序顯示它們。 此類用於TextBox es, NumericUpDown等。我也想將它用於TabPages 問題是,當我將它用於標簽頁時,我得到上面顯示的結果。 使用ImageList向標題添加錯誤圖標然后添加工具提示的技巧並不好,因為它特定於標簽頁,我無法在我的類中實現它,這對所有控件都是通用的。 所以我真的需要更改標簽頁的設置,所以當我使用errorProvider.SetError(...)它會顯示在標題中。

ErrorProvider在標簽頁的客戶區顯示TabPage錯誤圖標。 通過使用IconAlignmentIconPadding ,您可以在其中一個標簽頁的標題上顯示TabControl的錯誤圖標,但它是整個TabControl的錯誤圖標。

在實際應用程序中,每個選項卡頁面都可以包含無效的控件,您可能希望在選項卡頁面上顯示驗證圖標而不是選項卡控件。

我的建議是使用標簽頁圖標,將包含錯誤圖標的ImageList設置為TabControl圖像列表,並通過設置TabPage ImageIndex ,顯示或隱藏圖像圖標。 這樣,您可以顯示需要它的每個標簽頁的錯誤圖標:

在此輸入圖像描述

要設置示例,請按照下列步驟操作:

  1. 創建一個Form
  2. Form上刪除TabControlErrorProviderImageList
  3. tabControl1 ImageList屬性設置為imageList1
  4. tabPage1上刪除兩個TextBox
  5. 我假設,例如,您將使用Validating事件驗證這兩個文本框控件。 關鍵點在這里。 當您驗證任何控制,檢查它是否在的托管TabPage ,檢查所有兒童的有效性TabPage ,並設置基於該錯誤圖標:

     protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.AutoValidate = AutoValidate.EnableAllowFocusChange; imageList1.ColorDepth = ColorDepth.Depth32Bit; imageList1.Images.Add(errorProvider1.Icon); tabControl1.ImageList = imageList1; textBox1.Validating += textBox_Validating; textBox2.Validating += textBox_Validating; } private void textBox_Validating(object sender, CancelEventArgs e) { var textBox = (TextBox)sender; if (string.IsNullOrEmpty(textBox.Text)) { this.errorProvider1.SetError(textBox, "Value is required."); e.Cancel = true; } else this.errorProvider1.SetError(textBox, null); var tabPage = textBox.Parent as TabPage; if (tabPage != null) ValidateTabPage(tabPage); } void ValidateTabPage(TabPage tabPage) { var tabIsValid = tabPage.Controls.Cast<Control>() .All(x => string.IsNullOrEmpty(errorProvider1.GetError(x))); if (tabIsValid) tabPage.ImageIndex = -1; else tabPage.ImageIndex = 0; } 

您可以執行以下操作。

Rectangle rc = tabControl1.GetTabRect(0); // Replace with the index of Tab required
errorProvider1.SetIconPadding(tabControl1, -rc.Left-20);;
errorProvider1.SetError(tabControl1, "Error String");

你還需要設置

errorProvider1.SetIconAlignment(tabControl1, ErrorIconAlignment.TopLeft);

示例(選擇第二個選項卡 - 基於注釋),

您需要在TabPage文本中添加空格,以確保有足夠的空間來顯示圖標

在此輸入圖像描述

第二個選項卡上的圖標

在此輸入圖像描述

暫無
暫無

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

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