wpf 窗体加载于tabControl_SelectionChanged时间触发顺序

luo7269315 2013-12-19 09:54:37
我有一个窗体 里面有一个tabControl控件。并写了tabControl_SelectionChanged事件。
代码如下:

/// <summary>
/// 选择选项卡
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public event RoutedEventHandler tabChanged;
private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
int tab = this.tabControl1.SelectedIndex;
TabIniti(tab);
}

}


public void TabIniti(int tab)
{
switch (tab)
{
case 0:
this.cbbm.Visibility = Visibility.Collapsed;
this.sjxx.Visibility = Visibility.Collapsed;
this.xxxx.Visibility = Visibility.Visible;
break;
case 1:
this.cbbm.Visibility = Visibility.Visible;
this.sjxx.Visibility = Visibility.Collapsed;
this.xxxx.Visibility = Visibility.Collapsed;
break;
case 2:
this.cbbm.Visibility = Visibility.Collapsed;
this.sjxx.Visibility = Visibility.Visible;
this.xxxx.Visibility = Visibility.Collapsed;
break;
}
}

问题来了,插入断点,窗体在加载的时候就会直接跳进tabControl_SelectionChanged事件,,,我现在能想到的只能是加个全局参数去判断是否第一次加载。
有没有更好的方法去判断,第一次加载窗体的时候不触发tabControl_SelectionChanged事件啊?
在线等,,,
...全文
504 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
化境编程 2014-06-26
  • 打赏
  • 举报
回复
我的问题比你更奇葩 我的TabControl 里嵌套一个ListView , 子控件ListView的ListViewItem.SelectedEvent事件处理完了会自动触发到父控件的TabCtrl.SelectionChanged事件,无解 控件结构如下: <TabControl x:Name="TabCtrl"..> <ListView ...>
luo7269315 2013-12-19
  • 打赏
  • 举报
回复
一个TabItem里面显示两个
luo7269315 2013-12-19
  • 打赏
  • 举报
回复
引用 11 楼 KumaPower 的回复:
是不是跟你之前的“全局变量”有关?我结合你上面的代码,看不出问题。 不过我有个问题,为何你需要用Visibility来控制内容,通常做法不是直接在一个TabControl下有三个TabItem,TabItem中各自有那三个界面的内容?
是的,,,因为程序流程分下去的话总共是6级,,,合同-工程-项目-部门-分类-人员。
Bonjour-你好 2013-12-19
  • 打赏
  • 举报
回复
是不是跟你之前的“全局变量”有关?我结合你上面的代码,看不出问题。 不过我有个问题,为何你需要用Visibility来控制内容,通常做法不是直接在一个TabControl下有三个TabItem,TabItem中各自有那三个界面的内容?
luo7269315 2013-12-19
  • 打赏
  • 举报
回复
引用 8 楼 KumaPower 的回复:
[quote=引用 6 楼 luo7269315 的回复:] 运行可以了,,,但是这种写法,第一次点击tab页会没有反应,要第二次点击才会跳转,这又是什么情况啊?太感谢你了,,,比我用全局变量的土办法好多了
我这里测试没有问题。。。。 [/quote] 方法是进去了 后台运行也是对的 就是界面不会变化,,,奇怪了~~~~
luo7269315 2013-12-19
  • 打赏
  • 举报
回复


Bonjour-你好 2013-12-19
  • 打赏
  • 举报
回复
引用 6 楼 luo7269315 的回复:
运行可以了,,,但是这种写法,第一次点击tab页会没有反应,要第二次点击才会跳转,这又是什么情况啊?太感谢你了,,,比我用全局变量的土办法好多了


我这里测试没有问题。。。。
luo7269315 2013-12-19
  • 打赏
  • 举报
回复
引用 6 楼 luo7269315 的回复:
[quote=引用 5 楼 KumaPower 的回复:] 正常情况下,InitializeComponent();必须放在最开始,它是负责初始化界面控件的,你2楼的代码就是因为在InitializeComponent()之前对界面控件进行操作,所以才出错。 (把你在XAML中的对TabControl的SelectionChanged事件的代码先删除) 程序开始:
InitializeComponent();
tabControl.SelectionChanged += firstTabControl_SelectionChanged;
        private void firstTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            tabControl.SelectionChanged -= firstTabControl_SelectionChanged;
            tabControl.SelectedIndex = -1;
            tabControl.SelectionChanged += tabControl_SelectionChanged;
        }

        private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //你本来的代码......
        }
运行可以了,,,但是这种写法,第一次点击tab页会没有反应,要第二次点击才会跳转,这又是什么情况啊?太感谢你了,,,比我用全局变量的土办法好多了[/quote]
引用 5 楼 KumaPower 的回复:
正常情况下,InitializeComponent();必须放在最开始,它是负责初始化界面控件的,你2楼的代码就是因为在InitializeComponent()之前对界面控件进行操作,所以才出错。 (把你在XAML中的对TabControl的SelectionChanged事件的代码先删除) 程序开始:
InitializeComponent();
tabControl.SelectionChanged += firstTabControl_SelectionChanged;
        private void firstTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            tabControl.SelectionChanged -= firstTabControl_SelectionChanged;
            tabControl.SelectedIndex = -1;
            tabControl.SelectionChanged += tabControl_SelectionChanged;
        }

        private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //你本来的代码......
        }
不对,会进入 但是界面没变化 要第一下其他地方才会有变化,真奇怪啊。
luo7269315 2013-12-19
  • 打赏
  • 举报
回复
引用 5 楼 KumaPower 的回复:
正常情况下,InitializeComponent();必须放在最开始,它是负责初始化界面控件的,你2楼的代码就是因为在InitializeComponent()之前对界面控件进行操作,所以才出错。 (把你在XAML中的对TabControl的SelectionChanged事件的代码先删除) 程序开始:
InitializeComponent();
tabControl.SelectionChanged += firstTabControl_SelectionChanged;
        private void firstTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            tabControl.SelectionChanged -= firstTabControl_SelectionChanged;
            tabControl.SelectedIndex = -1;
            tabControl.SelectionChanged += tabControl_SelectionChanged;
        }

        private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //你本来的代码......
        }
运行可以了,,,但是这种写法,第一次点击tab页会没有反应,要第二次点击才会跳转,这又是什么情况啊?太感谢你了,,,比我用全局变量的土办法好多了
Bonjour-你好 2013-12-19
  • 打赏
  • 举报
回复
正常情况下,InitializeComponent();必须放在最开始,它是负责初始化界面控件的,你2楼的代码就是因为在InitializeComponent()之前对界面控件进行操作,所以才出错。 (把你在XAML中的对TabControl的SelectionChanged事件的代码先删除) 程序开始:
InitializeComponent();
tabControl.SelectionChanged += firstTabControl_SelectionChanged;
        private void firstTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            tabControl.SelectionChanged -= firstTabControl_SelectionChanged;
            tabControl.SelectedIndex = -1;
            tabControl.SelectionChanged += tabControl_SelectionChanged;
        }

        private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //你本来的代码......
        }
luo7269315 2013-12-19
  • 打赏
  • 举报
回复
引用 3 楼 KumaPower 的回复:
InitializeComponent();
这行要放到最前。。。。。。
那不行的 会先跳到tabControl1_SelectionChanged里面,,,
Bonjour-你好 2013-12-19
  • 打赏
  • 举报
回复
InitializeComponent();
这行要放到最前。。。。。。
luo7269315 2013-12-19
  • 打赏
  • 举报
回复
引用 1 楼 KumaPower 的回复:
tabControl.SelectedIndex=-1;
看看行不行。
不行, 试过了

public Window2()
        {
            TabI = 0;
            this.tabControl1.SelectedIndex = -1;
            InitializeComponent();
        }
编译没报错,运行的时候就会报错
Bonjour-你好 2013-12-19
  • 打赏
  • 举报
回复
tabControl.SelectedIndex=-1;
看看行不行。

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧