2016-04-27 18 views
0

私はMicrosoft Visual Studio 2013を使用しており、C#で記述しています。私はTabControlクラスの子孫を書いて、OnClickメソッドをオーバーライドしてから、既存のTabControlエレメントを新しいクラスを使用するように変更しました。すべてがコンパイルされて実行されますが、コンストラクタのブレークポイントに達しましたが、OnClickオーバーライドを使用していません!ここにTabControlの子孫コードがあります。何か助けてくれてありがとう!Override c#TabControl OnClickが呼び出されない

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace LumaSense.Imaging.Calibration.UI 
{ 
    public partial class TabControlModified : TabControl 
    { 
     public TabControlModified() 
     { 
      InitializeComponent(); 
     } 

     private bool superuser; 
     public int lastTabSelectedIndex = 0; 

     public bool Superuser 
     { 
      get { return superuser; } 
      set { superuser = value; } 
     } 

     public int LastTabSelectedIndex 
     { 
      get { return lastTabSelectedIndex; } 
      set 
      { this.lastTabSelectedIndex = value; } 
     } 

     protected override void OnClick(EventArgs e) 
     { 
      // SelectedIndex and tab have already changed before we get here 
      if (this.superuser == false) 
      { 
       if (this.SelectedIndex <= this.lastTabSelectedIndex) 
       { 
        this.LastTabSelectedIndex = this.SelectedIndex; 
        base.OnClick(e); 
       } 
       else 
       { 
        base.OnClick(e); 
        this.SelectedIndex = lastTabSelectedIndex; 
       } 
      } 
      else 
      { 
       this.LastTabSelectedIndex = this.SelectedIndex; 
       base.OnClick(e); 
      } 
     } 
    } 
} 
+0

このカスタムタブコントロールをインスタンス化するとき、コントロールにページを追加していますか?ページがない限り、クリックしたときにOnClickメソッドよりもトリガされるタブは表示されません。 – Mikanikal

答えて

0

このスニペットはうまく機能します。タブが表示され、ユーザーがクリックできるようにするには、タブコントロールにページを追加していることを確認する必要があります。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     var mTab = new MyTab(); 
     mTab.Location = new System.Drawing.Point(100, 100); 

     // The OnClick will only work on the 
     // Tabs themselves so Pages must be added to display the Tabs. 
     var mtabPage1 = new System.Windows.Forms.TabPage(); 
     mTab.Controls.Add(mtabPage1); 

     this.Controls.Add(mTab); 
    } 

    class MyTab : TabControl 
    { 
     protected override void OnClick(EventArgs e) 
     { 
      MessageBox.Show("I was clicked."); 

      base.OnClick(e); 
     } 
    } 
} 
+0

TabControlの子孫を作成する代わりに、選択解除と選択を使用すると問題が解決されることがわかりました。何らかの形で、TabControl子孫を使用しているときに、TabControlModified .SelectedIndexのReactive UIバインディングを追加すると、上書きされたOnClickがもう呼び出されなくなりました。 – Anne

0

TabControlの子孫を作成する代わりに、選択解除と選択を使用すると問題が解決されていることがわかりました。何らかの形で、TabControl子孫を使用しているときに、TabControlModified .SelectedIndexのReactive UIバインディングを追加すると、上書きされたOnClickがもう呼び出されなくなりました。

関連する問題