zoukankan      html  css  js  c++  java
  • wpf中插入winform控件并获取句柄

    因工作需要使用wpf做界面,而有个开发包依赖picturebox控件,上网研究了一下,总算弄通了。

    首先在项目中添加引用System.Windows.Forms与WindowsFormsIntegration

    1 //在wpf主界面添加       
    2 xmlns:wfh="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
    3 xmlns:wfc="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    1 //添加winform控件
    2 <Grid>
    3         <WindowsFormsHost x:Name="form1" HorizontalAlignment="Left" Height="500" Margin="10,65,0,0" VerticalAlignment="Top" Width="750">
    4             <wfc:FlowLayoutPanel x:Name="flowLayoutPanel1">
    5 
    6             </wfc:FlowLayoutPanel>
    7         </WindowsFormsHost>
    8 </Grid>

    获取句柄

    1             IntPtr flpHandle = flowLayoutPanel1.Handle;//仅限主界面代码段

    动态创建picturebox放到flowLayoutPanel中

     1 PictureBox pb = new PictureBox
     2 {
     3   Width = 500,
     4   Height = 400,
     5   Bounds = new System.Drawing.Rectangle(0, 0, 500, 400),
     6   Name = "PictureBox" + Convert.ToString(index)
     7 };
     8 
     9 PictureBox temp = pb;
    10 Control flp = Control.FromHandle(flpHandle);
    11 //考虑动态创建可能存在跨线程访问,添加判断                        
    12 if (flp.InvokeRequired)
    13 {
    14   flp.Invoke(new Action(
    15   () => { flp.Controls.Add(temp); picHandle = temp.Handle; }
    16   ));
    17 }
    18  else
    19 {
    20   flp.Controls.Add(pb);
    21 }

     注意在非主界面程序段,不要调用界面元素,不然会报错InvalidaOperationException

  • 相关阅读:
    泛型
    事件和委托
    参数和属性
    常量、字段、和方法
    LINQ
    LINQ- 子查询、组合策略、投影策略
    MySQL全局锁和表锁
    CLR基础
    LINQ
    LINQ
  • 原文地址:https://www.cnblogs.com/carbo-T/p/9647509.html
Copyright © 2011-2022 走看看