using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;
using System.ComponentModel;
namespace TextboxsStyleLineControlLibrary
{
/// <summary>
///csharp winform 划横线输入框
/// 塗聚文 2012-03-27
/// 締友計算機信息技術有限公司
/// 捷為工作室
/// </summary>
[ToolboxItem(true)]
public class GeovinDuTextBoxLine:TextBox
{
private bool m_DrawLine = false;
private const int WM_NCPAINT = 0x0085;
private const int WM_CHAR = 0x0102;
[System.Runtime.InteropServices.DllImport("user32.dll ")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll ")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
/// <summary>
///
/// </summary>
public GeovinDuTextBoxLine()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.BorderStyle = BorderStyle.None;
}
private Color _linecolor = Color.Black;
/// <summary>
/// 线条颜色
/// </summary>
public Color LineColor
{
get
{
return this._linecolor;
}
set
{
this._linecolor = value;
this.Invalidate();
}
}
private const int WM_PAINT = 0xF;
/// <summary>
///
/// </summary>
public bool DrawLine
{
get
{
return this.m_DrawLine;
}
set
{
this.m_DrawLine = value;
this.Invalidate();
}
}
/// <summary>
///
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0xf || m.Msg == 0x133)
{
if (this.DrawLine)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == 0)
{
return;
}
Graphics g = Graphics.FromHdc(hDC);
//Brush b = Brushes.Black;
Pen p = new Pen(this._linecolor, 1);//b
Point p1 = new Point(0, this.Height - 2);
Point p2 = new Point(this.Width, Height - 2);
g.DrawLine(p, p1, p2);
m.Result = IntPtr.Zero;
ReleaseDC(m.HWnd, hDC);
}
}
}
}
}
分享到:
相关推荐
在标题“winform下TextBox只显示一条直线自定义控件源码”中,提到的是一个特殊的TextBox控件,它仅显示一条直线,而非常规的矩形边框。这通常是为了追求更简洁、现代的UI设计。以下将详细解析这个自定义控件的设计...
在C# WinForm开发中,有时我们可能需要创建具有特殊视觉效果的控件,比如将一个TextBox控件显示为仅有一条线的简洁样式。这样的设计可以使得界面更加清爽,减少不必要的视觉干扰。标题“C# WinForm控件TextBox扩展...
系统默认的滚动条样式可能无法满足所有设计要求,因此开发者经常需要重绘滚动条以实现独特的皮肤效果。本文将深入探讨如何在C# WinForm中实现滚动条的重绘。 首先,我们要理解WinForm中的控件绘制机制。Windows ...
【WinForm随机验证码-简单版】是一个针对C# WinForm应用程序设计的基础教程,主要目标是教会开发者如何在Windows窗体应用中生成并显示随机验证码。验证码(CAPTCHA)是一种用于验证用户是否为真实人类的技术,通常...
1. **基本控件的使用**:如按钮(Button)、文本框(TextBox)、标签(Label)、列表框(ListBox)、复选框(CheckBox)、单选按钮(RadioButton)等,它们是WinForm界面的基础元素。 2. **事件处理**:每个控件都有其特定的...
本主题将深入探讨如何在.NET环境中创建一个自定义的TextBox控件,该控件不仅具备标准TextBox的功能,还带有下划线样式和附加的按钮元素,以提升用户体验和交互性。 首先,我们需要创建一个新的UserControl类来承载...
首先,创建Pen对象定义线的样式,然后使用GraphicsPath创建箭头路径,最后调用Graphics对象的DrawPath方法绘制路径: ```csharp Pen arrowPen = new Pen(Color.Black, 2); GraphicsPath path = new GraphicsPath();...
### C# WinForm ListView 动态插入数据详解 在C#的WinForms应用程序开发中,`ListView` 控件是常用的一种界面元素,用于显示一系列条目,并且支持多种视图模式,如大图标、小图标、列表、详细信息等。在实际应用中...
在本文中,我们将深入探讨如何在C# Winform应用程序中实现与鼠标事件相关的功能,特别是集中在PicureBox控件上。我们将关注以下知识点: 1. 鼠标事件处理: C# Winform中,我们可以利用不同的鼠标事件来实现用户...
在某些设计需求下,可能需要将传统的矩形文本框变为一条直线,以达到特殊的视觉效果或者简化界面。标题“将文本框变成一条直线”所指的就是这样一个设计技巧,它通常用于实现输入提示或者简单的分隔线。 在C#编程...
在.NET框架下,Windows Forms(Winform)是一个用于构建桌面应用程序的强大工具。在这个场景中,我们探讨的主题是如何在Winform应用中实现验证码功能。验证码的主要目的是为了防止恶意自动化程序(如机器人)对网站...
在WinForm应用中,验证码通常通过图形界面显示一个随机生成的图像,用户需要输入图像上显示的文字或数字以证明其人类身份。本篇将详细讲解如何在C#环境下开发WinForm验证码功能。 首先,我们需要理解C#编程语言的...
在处理实时数据或者数据分析时,我们可能需要实现一个功能,即当鼠标在图表上移动时,游标(Cursor)能实时跟踪鼠标的移动位置,以便于更精确地查看数据点的具体值。这个功能在描述中被称为“CursorX跟随鼠标移动”。 ...
在WinForm界面中添加一个PictureBox控件显示验证码图像,并添加一个TextBox供用户输入验证码。在按钮点击事件中,调用`DrawCaptcha`方法生成新的验证码图像并更新PictureBox,同时清空TextBox以便用户输入。 6. **...
在C#编程中,特别是在开发桌面应用程序(如WinForms或WPF)时,经常会遇到需要在子线程中更新UI控件的情况。由于UI界面通常运行在...无论采用哪种方法,都应确保理解线程同步的基本原理,以确保代码的健壮性和正确性。
但这种方法会导致控件无法自动更新,效率较低,且某些控件(如TextBox的光标、WebBrowser的内容)可能无法正确显示。 3. 使用DirectUI技术:自定义所有基础控件,虽然效果最佳,但开发工作量较大。 为了提高效率和...
在C#编程中,Windows Forms是一个用于创建桌面应用程序的强大框架。它允许开发人员创建具有丰富图形界面的应用程序。本篇文章将深入探讨如何使用C#在窗体上绘制基本图形,如椭圆、圆和矩形。这对于初学者来说是学习...
首先,模态窗口是一种在显示时阻止用户与应用程序中其他窗口进行交互的窗口。用户必须先关闭模态窗口才能继续操作其他窗口。在C#中,我们通常使用`ShowDialog()`方法来显示模态窗口。例如: ```csharp Form2 modal...
同时,可以将结果显示在控件如Label或TextBox中。 在描述中提到,这个示例项目已经将官方示例整合到一个窗体中,实现了主从站通信,并能从Modbus从站获取数据显示。这意味着它可能包含了一个完整的用户界面,可以...