C#在窗体上画线,并且当线条穿过窗体上控件时,也不被控件覆盖 c#winform 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 换成WPF也可以(本质上它也是画画)。 yes! 兄台可否明示代码? yes! 兄台可否明示代码?我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢 yes! 兄台可否明示代码?我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢为什么不在按钮上也画一条线? yes! 兄台可否明示代码?我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢为什么不在按钮上也画一条线??? 由于无法在各个控件上覆盖同一画布,所以,如果你想那些控件还能用的话,就只能每个控件都去画这条线当然,如果画线以后,画面上的控件都变成摆设的话倒是可以给当前Form截张图(DrawToBitmap)然后覆盖一个Label到整个From再把截的图给Label用来显示然后在Label上面画线 直接在form上画图,button上线会被挡住吗? Winform的话放个 背景色 (0,0,0,0) 的lable在lable上画线lable在所有控件之上 根本的解决方案是研究windows api,直接绘制在屏幕最上层,然后判断当前form的位置和可视化。这样做要研究的东西蛮多的,祝你好运。 别画线了,放个1px高的控件在最上层,给个颜色就好了。聪明的做法.不过只能是直上直下的,斜线就不行了...斜线也可以,修改控件的Region然后填充颜色就好了。但是这根线可能会有点磕磕巴巴,如果没有做线性插值填充。但是这些线还是会对控件的事件响应造成一点点影响,哪怕只有一个像素。 但是无边框窗体失去焦点后,就变到另外一个窗体下面去了。form2.owner=form1即可 帅哥,我用你的方法画出来的线还是在scButton1之下哦,能否解释一下? 解释你为什么要混合控件和图形,最好能出一张草图。因为这种需求本来就比较少见。如果你确实有非常特殊的需求要大量混合控件和图形,建议你用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> 那设备们就是图元,而不应该是控件。自己进行一定的处理,那么图元也可以拖动,图元也可以点击 。以下是用于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; } com组件接口问题 询问一个计算方法 C#变量的生存周期问题 求助:Winform中的DataGrid列如何绑定下拉框或者按钮,急~~~~~~~~~~~~~~~~~~~~~~~~ 用__doPostBack('Button1','');来执行BUTTON1的事件为什么不执行 请教一个弹出框的问题(50分) 图片编辑难题 关于一个判断数据的问题(急急急) 如何在窗口透明时响应鼠标事件?? 请问怎么把一个dataSet数据源绑定到一个treeview控件?急啊!!!!! C#日期格式转化 用CheckboxSelectionModel只可以单选,就是写function方法求大神替我写下
yes! 兄台可否明示代码?
yes! 兄台可否明示代码?
我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢
yes! 兄台可否明示代码?
我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢
为什么不在按钮上也画一条线?
yes! 兄台可否明示代码?
我也不会啊。。坐等版主来发代码我只是知道你说的这个意思,,把图发出来大家看的明白。。图是P的呢
为什么不在按钮上也画一条线?
??
所以,如果你想那些控件还能用的话,就只能每个控件都去画这条线当然,如果画线以后,画面上的控件都变成摆设的话
倒是可以给当前Form截张图(DrawToBitmap)
然后覆盖一个Label到整个From
再把截的图给Label用来显示
然后在Label上面画线
放个 背景色 (0,0,0,0) 的lable
在lable上画线
lable在所有控件之上
聪明的做法.不过只能是直上直下的,斜线就不行了...
斜线也可以,修改控件的Region然后填充颜色就好了。但是这根线可能会有点磕磕巴巴,如果没有做线性插值填充。
但是这些线还是会对控件的事件响应造成一点点影响,哪怕只有一个像素。
简单的例子可以新建一个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>
自己进行一定的处理,那么图元也可以拖动,图元也可以点击 。以下是用于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;
}