winfrom下tree的使用

  #region 循环添加其子节点
  /// <summary>
  /// 循环添加其子节点
  /// </summary>
  /// <param name="parentNode">父节点</param>
  /// <param name="len">字符长度</param>
  /// <param name="parentrow">父行</param>
  ///  <param name="parentkey">父Key</param>
  ///  <param name="childDs">相同DataSet</param>
  private void RowSelect(TreeNode parentNode,int len,DataRow parentrow,string parentkey,DataSet childDs)
  {
   len = len+2;
   foreach(DataRow crw in childDs.Tables[0].Rows)
   {
    string chdKey = crw["FKey"].ToString();
    if(chdKey.Length==len && chdKey.Substring(0,len-2)==parentkey)
    {
     TreeNode newnode=AddChildNode(parentNode,crw);
     //递归
     RowSelect(newnode,len, crw , chdKey, childDs);
    }
   }
  }
  #endregion

  #region CreateNode创建一个节点
  /// <summary>
  /// 创建一个节点
  /// </summary>
  /// <param name="nodeText">显示的字符</param>
  /// <param name="nodeNo">节点的标识</param>
  /// <param name="nodeID" >节点的ID</param>
  /// <param name="imgIndex">节点正常状态下的图标</param>
  /// <param name="selectImgIndex">节点被选中时的图标</param>
  /// <param name="nodeType">节点的类别</param>
  /// <param name="chk">节点checked</param>
  /// <returns>返回创建的节点</returns>
  private TreeNode CreateNode(string nodeText,string nodeNo,string nodeID,int imgIndex,int selectImgIndex,string nodeType,bool chk)
  {
   TreeNode newNode=new TreeNode(nodeText,imgIndex,selectImgIndex);
   //设置checked属性
   newNode.Checked=chk;
   newNode.Tag=new string[]{nodeType,nodeNo,nodeID};
   return newNode;
  }
  #endregion

  #region 递归函数,添加其子节点
  //递归函数,添加其子节点
  /**
   名称: AddChildNode
   功能:
     递归函数,添加其子节点
   参数:
     parentRow 父行
     parentNode 要添加子节点的节点
   返回值: 无                          
  **/

  /// <summary>
  /// 递归函数,添加其子节点
  /// </summary>
  /// <param name="parentNode">父节点</param>
  /// <param name="parentRow">相关的数据行集合的父行</param>
  /// <returns>返回创建的节点</returns>
  private TreeNode AddChildNode(TreeNode parentNode,DataRow parentRow)
  {
   DataRow childRows = parentRow;
   //假如有下级模块,添加下级模块信息
   bool chk = bool.Parse(childRows["FAuFlag"].ToString()) ;
   TreeNode newNode=CreateNode(childRows["FName"].ToString(),childRows["FLinkID"].ToString(),childRows["FModOrFuncID"].ToString(),childRows["FType"].ToString()=="Func"?1:0,childRows["FType"].ToString()=="Func"?1:0,childRows["FType"].ToString(),chk);
   parentNode.Nodes.Add(newNode); 
   return newNode;
  }
  #endregion

  private void UserPowerView_Load(object sender, System.EventArgs e)
  {
   //设置连接字符串
   userAdmin.SetConnectionString();
   DataSet ds=null;
   if(PostPower.GetAuType == "岗位")
   {
    this.Text = "授权->岗位";
    //获取岗位权限数据
    ds = BDEnterpriseObjects.bdPostInfo.GetPostModAndFuncAuInfo(PostPower.GetPostID);
    btOk.Enabled = PostPower.Getbtable;
   }
   else if(UserPower.GetAuType == "用户")
   {
    this.Text = "授权->用户";
    //获取用户权限数据
    ds = BDEnterpriseObjects.bdSysUser.GetEmpModAndFuncAuInfo(UserPower.GetLoginID);
    btOk.Enabled = UserPower.Getbtable;
   }
   int len = 2;
   //构建最上层根节点
   foreach(DataRow rw in ds.Tables[0].Rows)
   {
    string Key = rw["FKey"].ToString(); 
    if(Key.Length==len&&Key.Substring(0,len-2)=="")
    {
     TreeNode newNode = CreateNode(rw["FName"].ToString(),rw["FLinkID"].ToString(),rw["FModOrFuncID"].ToString(),0,0,rw["FType"].ToString(),bool.Parse(rw["FAuFlag"].ToString()));
     TreeModFunc.Nodes.Add(newNode);
     RowSelect(newNode,len,rw,Key,ds);
    }
   } 
  }

  #region 可以删除得到模块或功能ID
  /// <summary>
  /// 得到模块或功能ID
  /// </summary>
  /// <param name="withNodes">TreeNode对象的集合</param>
  /// <param name="chkIDstr">节点ID</param>
  /// <param name="chkTypeStr">节点类型</param>
  /// <param name="i">index 点的索引[返回节点的总数] </param>
  private void ChkNode(TreeNodeCollection withNodes,string chkIDstr,string chkTypeStr,string chkFlink,ref int i)
  {
   //循环创建节点权限
   foreach(TreeNode lsNode in withNodes)
   {
    string[] nodeInfos=(string[])lsNode.Tag;
    if(lsNode.Checked)
    {
     chkIDstr =nodeInfos[2];
     chkFlink = nodeInfos[1];
     chkTypeStr = nodeInfos[0];
     i++;
    }
    //递归检查设置
    ChkNode(lsNode.Nodes,chkIDstr,chkTypeStr,chkFlink,ref i);
   }
  }
  #endregion

WinForm使用高精度定时器可以通过以下步骤实现: 首先,确保你的项目引用了System.Diagnostics命名空间。 其次,创建一个Timer对象并设置其Interval属性为你想要的定时器精度。注意,Timer的默认精度为15.6毫秒,如果你需要更高精度的定时器,可以将其Interval属性设置得更小。 然后,创建一个事件处理程序来处理Timer对象的Tick事件。这个事件处理程序将会在每次定时器触发时执行。在事件处理程序中,你可以编写你需要执行的代码逻辑。 最后,将你的事件处理程序与Timer对象的Tick事件关联,这样当定时器触发时,你的代码逻辑就会被执行。 下面是一个使用高精度定时器的示例代码: ``` using System; using System.Diagnostics; using System.Windows.Forms; namespace HighPrecisionTimerExample { public partial class MainForm : Form { private Timer timer; public MainForm() { InitializeComponent(); // 创建高精度定时器 timer = new Timer(); timer.Interval = 1; // 设置定时器精度为1毫秒 timer.Tick += Timer_Tick; // 关联事件处理程序 } private void Timer_Tick(object sender, EventArgs e) { // 在这里编写你的代码逻辑,每当定时器触发时会执行这里的代码 // 例如:更新UI界面、进行某些计算等操作 } private void startButton_Click(object sender, EventArgs e) { timer.Start(); // 启动定时器 } private void stopButton_Click(object sender, EventArgs e) { timer.Stop(); // 停止定时器 } } } ``` 在这个示例中,我们创建了一个名为timer的Timer对象,并将其精度设置为1毫秒。当用户点击"startButton"按钮时,定时器将会启动,每当定时器触发时,Timer_Tick事件处理程序将会执行。当用户点击"stopButton"按钮时,定时器将会停止。 通过以上步骤,我们可以在WinForm使用高精度定时器来实现我们的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值