解决方案 »

  1.   

    换成WPF也可以(本质上它也是画画)。
      

  2.   


         yes!   兄台可否明示代码?
      

  3.   


         yes!   兄台可否明示代码?
    我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢
      

  4.   


         yes!   兄台可否明示代码?
    我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢
    为什么不在按钮上也画一条线?
      

  5.   


         yes!   兄台可否明示代码?
    我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢
    为什么不在按钮上也画一条线?
    ??
      

  6.   

    由于无法在各个控件上覆盖同一画布,
    所以,如果你想那些控件还能用的话,就只能每个控件都去画这条线当然,如果画线以后,画面上的控件都变成摆设的话
    倒是可以给当前Form截张图(DrawToBitmap)
    然后覆盖一个Label到整个From
    再把截的图给Label用来显示
    然后在Label上面画线
      

  7.   

    直接在form上画图,button上线会被挡住吗?
      

  8.   

    Winform的话
    放个 背景色 (0,0,0,0) 的lable
    在lable上画线
    lable在所有控件之上
      

  9.   

    根本的解决方案是研究windows api,直接绘制在屏幕最上层,然后判断当前form的位置和可视化。这样做要研究的东西蛮多的,祝你好运。
      

  10.   

    别画线了,放个1px高的控件在最上层,给个颜色就好了。
    聪明的做法.不过只能是直上直下的,斜线就不行了...
    斜线也可以,修改控件的Region然后填充颜色就好了。但是这根线可能会有点磕磕巴巴,如果没有做线性插值填充。
    但是这些线还是会对控件的事件响应造成一点点影响,哪怕只有一个像素。
      

  11.   

           但是无边框窗体失去焦点后,就变到另外一个窗体下面去了。form2.owner=form1即可
      

  12.   

           帅哥,我用你的方法画出来的线还是在scButton1之下哦,能否解释一下?
      

  13.   

    解释你为什么要混合控件和图形,最好能出一张草图。因为这种需求本来就比较少见。如果你确实有非常特殊的需求要大量混合控件和图形,建议你用WPF来做。
    简单的例子可以新建一个WPF项目,然后在<Grid>下替换如下代码:
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <!-- 添加 -->
            <Button Content="Hello" Width="100" Height="40" />
            <Canvas>
                <Line X1="0" Y1="0" X2="400" Y2="300" Stroke="Red" />
            </Canvas>
            <!-- 结束添加 -->
        </Grid>
    </Window>
      

  14.   

    那设备们就是图元,而不应该是控件。
    自己进行一定的处理,那么图元也可以拖动,图元也可以点击 。以下是用于Winform的简化例子,你自己写可以用UserControl并对图元进行‘包装’ :
    public Form1()
    {
        // InitializeComponent(); 可以把这行先注释掉。
    }// 添加以下内容即可运行
    Rectangle button1Rect = new Rectangle(50, 50, 100, 40);
    Rectangle button2Rect = new Rectangle(100, 100, 100, 40);
    bool button1Hover, button2Hover;
    Point lastPoint;protected override void OnPaint(PaintEventArgs e)
    {
        ButtonRenderer.DrawButton(e.Graphics, button1Rect, button1Hover ? PushButtonState.Hot : PushButtonState.Normal);
        ButtonRenderer.DrawButton(e.Graphics, button2Rect, button2Hover ? PushButtonState.Hot : PushButtonState.Normal);
        e.Graphics.DrawLine(Pens.Red, Point.Empty, new Point(this.ClientRectangle.Width, this.ClientRectangle.Height));
    }protected override void OnMouseMove(MouseEventArgs e)
    {
        bool hover1 = button1Rect.Contains(e.Location);
        bool hover2 = button2Rect.Contains(e.Location);
        if (button1Hover != hover1) { button1Hover = hover1; this.Invalidate(button1Rect); }
        if (button2Hover != hover2) { button2Hover = hover2; this.Invalidate(button2Rect); }    if (this.Capture)
        {
            Point offset = new Point(e.Location.X - lastPoint.X, e.Location.Y - lastPoint.Y);
            if (hover1)
            {
                this.Invalidate(button1Rect);
                button1Rect.Offset(offset);
                this.Invalidate(button1Rect);
            }
            if (hover2)
            {
                this.Invalidate(button2Rect);
                button2Rect.Offset(offset);
                this.Invalidate(button2Rect);
            }
        }
        this.lastPoint = e.Location; 
    }