当前位置: 编程技术>.net/c#/asp.net
本页文章导读:
▪WinForm 使用TreeView控件作为导航的 TreeNode(TreeView)点击事件(Click、DoubleClick ~)的一般做法 在WinForm程序中,我们有时候会使用TreeView控件来作为系统的侧边栏的导航(图1),通常这些TreeNode项也是根据用户的权限来动态生成的,那么我们在这种情况下,又如何更好的处理TreeNode的点.........
▪WinForm 处理未处理的异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.ThreadException += Application_Th.........
▪重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup [源码下载]重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup作者:webabcd介绍重新想象 Windows 8 Store Apps 之内容控件ToolTip - .........
[1]WinForm 使用TreeView控件作为导航的 TreeNode(TreeView)点击事件(Click、DoubleClick ~)的一般做法
在WinForm程序中,我们有时候会使用TreeView控件来作为系统的侧边栏的导航(图1),通常这些TreeNode项也是根据用户的权限来动态生成的,那么我们在这种情况下,又如何更好的处理TreeNode的点击事件呢?(Click、DoubleClick 等等)
图1
在TreeNode中有一个Tag的属性,类型为Object,通常我会巧妙的使用这个Tag来处理如上的点击事件。由于代码的实现比较简单,我就直接上代码了:代码1定义了NavNode类,定义了 Click() 和 DoubleClick() 方法;代码2中展示了如何实例化TreeNode并如何处理TreeNode的点击事件;
class NavNode
{
public virtual void Click()
{
}
public virtual void DoubleClick()
{
}
}
class EmptyNode : NavNode
{
}
//功能1
class Fun1Node : NavNode
{
public override void DoubleClick()
{
try
{
IndexForm indexForm = new IndexForm();
indexForm.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
{
public virtual void Click()
{
}
public virtual void DoubleClick()
{
}
}
class EmptyNode : NavNode
{
}
//功能1
class Fun1Node : NavNode
{
public override void DoubleClick()
{
try
{
IndexForm indexForm = new IndexForm();
indexForm.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
代码1
//TODO: 这里可以根据用户的权限,动态的生成菜单节点
TreeNode node = new TreeNode("首页");
node.Tag = new EmptyNode();
TreeNode nodeFun1 = new TreeNode("功能1");
nodeFun1.Tag = new Fun1Node();
node.Nodes.Add(nodeFun11);
treeView1.Nodes.Add(node);
treeView1.NodeMouseDoubleClick += (s, e) =>
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
NavNode currentNode = (NavNode)e.Node.Tag;
if (currentNode != null)
{
currentNode.DoubleClick();
}
}
};
TreeNode node = new TreeNode("首页");
node.Tag = new EmptyNode();
TreeNode nodeFun1 = new TreeNode("功能1");
nodeFun1.Tag = new Fun1Node();
node.Nodes.Add(nodeFun11);
treeView1.Nodes.Add(node);
treeView1.NodeMouseDoubleClick += (s, e) =>
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
NavNode currentNode = (NavNode)e.Node.Tag;
if (currentNode != null)
{
currentNode.DoubleClick();
}
}
};
代码2
本文链接
[2]WinForm 处理未处理的异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.ThreadException += Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
/// <summary>
/// 处理应用程序域内的未处理异常(非UI线程异常)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = e.ExceptionObject as Exception;
MessageBox.Show(ex.Exception.Message);
}
catch { }
}
/// <summary>
/// 处理应用程序的未处理异常(UI线程异常)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
MessageBox.Show(e.Exception.Message);
}
catch { }
}
}
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.ThreadException += Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
/// <summary>
/// 处理应用程序域内的未处理异常(非UI线程异常)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = e.ExceptionObject as Exception;
MessageBox.Show(ex.Exception.Message);
}
catch { }
}
/// <summary>
/// 处理应用程序的未处理异常(UI线程异常)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
MessageBox.Show(e.Exception.Message);
}
catch { }
}
}
这里有一个需要注意的地方,如下代码 Application.Run(new MainForm()); 这里只能执行一次 Application.Run代码,如果你像下面这样写代码的话:
Application.Run(new SplashScreenForm());
Application.Run(new MainForm());
Application.Run(new MainForm());
那么如果在MainForm出现未处理的异常(UI异常或是非UI异常),上面的异常处理程序就无法捕获了。
本文链接
[3]重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup
[源码下载]
重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup
作者:webabcd
介绍
重新想象 Windows 8 Store Apps 之内容控件
- ToolTip - 提示框控件
- Frame - 框架控件,用于导航内容
- AppBar - 应用程序栏控件
- ContentControl ContentPresenter - ContentPresenter 用来呈现 ContentControl 的 Content
重新想象 Windows 8 Store Apps 之容器控件
- Border - 边框控件
- Viewbox - 控制子元素如何拉伸的容器控件
- Popup - 弹出框控件
示例
1、ToolTip 的 Demo
ToolTipDemo.xaml
<Page
x:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Name="root" Margin="120 0 0 0">
<TextBlock Text="TextBlock" ToolTipService.ToolTip="ToolTipService.ToolTip" ToolTipService.Placement="Bottom" FontSize="14.667" />
<!--
ToolTip - 提示框控件
Content - 提示内容
Placement - 提示框的显示位置(Bottom, Right, Mouse, Left, Top)
IsOpen - 提示框是否可见
Closed - 提示框关闭后所触发的事件
Opened - 提示框打开后所触发的事件
-->
<TextBlock Text="TextBlock" FontSize="14.667" Margin="0 100 0 0">
<ToolTipService.ToolTip>
<ToolTip Name="toolTip" Content="ToolTipService.ToolTip" Placement="Bottom" />
</ToolTipService.ToolTip>
</TextBlock>
</StackPanel>
</Grid>
</Page>
x:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Name="root" Margin="120 0 0 0">
<TextBlock Text="TextBlock" ToolTipService.ToolTip="ToolTipService.ToolTip" ToolTipService.Placement="Bottom" FontSize="14.667" />
<!--
ToolTip - 提示框控件
Content - 提示内容
Placement - 提示框的显示位置(Bottom, Right, Mouse, Left, Top)
IsOpen - 提示框是否可见
Closed - 提示框关闭后所触发的事件
Opened - 提示框打开后所触发的事件
-->
<TextBlock Text="TextBlock" FontSize="14.667" Margin="0 100 0 0">
<ToolTipService.ToolTip>
<ToolTip Name="toolTip" Content="ToolTipService.ToolTip" Placement="Bottom" />
</ToolTipService.ToolTip>
</TextBlock>
</StackPanel>
</Grid>
</Page>
2、Frame 的 Demo
Frame/Demo.xaml
<Page
x:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls.Frame"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="120 0 0 0" Orientation="Horizontal">
<StackPanel Width="400">
<Button Name="btnGotoFrame1" Content="导航至 Frame1" Click="btnGotoFrame1_Click_1" />
<Button Name="btnGotoFrame2" Content="导航至 Frame2" Click="btnGotoFrame2_Click_1" Margin="0 10 0 0" />
<Button Name="btnBack" Content="后退" Click="btnBack_Click_1" Margin="0 10 0 0" />
<Button Name="btnForward" Content="前进" Click="btnForward_Click_1" Margin="0 10 0 0" />
<TextBlock Name="lblMsg" FontSize="14.667"
x:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls.Frame"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="120 0 0 0" Orientation="Horizontal">
<StackPanel Width="400">
<Button Name="btnGotoFrame1" Content="导航至 Frame1" Click="btnGotoFrame1_Click_1" />
<Button Name="btnGotoFrame2" Content="导航至 Frame2" Click="btnGotoFrame2_Click_1" Margin="0 10 0 0" />
<Button Name="btnBack" Content="后退" Click="btnBack_Click_1" Margin="0 10 0 0" />
<Button Name="btnForward" Content="前进" Click="btnForward_Click_1" Margin="0 10 0 0" />
<TextBlock Name="lblMsg" FontSize="14.667"
最新技术文章:
 
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!