- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试创建一个继承 NumericUpDown
的自定义控件以显示可设置的单位。
这是(视觉上)到目前为止我得到的:
我的代码: 看起来有点长,但没那么多
class NumericUpDownUnit : NumericUpDown
{
public event EventHandler ValueChanged;
///
/// Constructor creates a label
///
public NumericUpDownUnit()
{
this.TextChanged += new EventHandler(TextChanged_Base);
this.Maximum = 100000000000000000;
this.DecimalPlaces = 5;
this.Controls.Add(lblUnit);
lblUnit.BringToFront();
UpdateUnit();
}
public void TextChanged_Base(object sender, EventArgs e)
{
if(ValueChanged != null)
{
this.ValueChanged(sender, e);
}
}
///
/// My designer property
///
private Label lblUnit = new Label();
[Description("The text to show as the unit.")]
public string Unit
{
lấy
{
return this.lblUnit.Text;
}
bộ
{
this.lblUnit.Text = value;
UpdateUnit();
}
}
///
/// When unit has changed, calculate new label-size
///
public void UpdateUnit()
{
System.Drawing.Size size = TextRenderer.MeasureText(lblUnit.Text, lblUnit.Font);
lblUnit.Padding = new Padding(0, 0, 0, 3);
lblUnit.Size = new System.Drawing.Size(size.Width, this.Height);
lblUnit.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
lblUnit.BackColor = System.Drawing.Color.Transparent;
lblUnit.Location = new System.Drawing.Point(this.Width-lblUnit.Width-17, 0);
}
///
/// If text ends with seperator, skip updating text as it would parse without decimal palces
///
protected override void UpdateEditText()
{
if (!this.Text.EndsWith(".") && !this.Text.EndsWith(","))
Text = Value.ToString("0." + new string('#', DecimalPlaces));
}
///
/// Culture fix
///
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (e.KeyChar.Equals('.') || e.KeyChar.Equals(','))
{
e.KeyChar = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToCharArray()[0];
}
base.OnKeyPress(e);
}
///
/// When size changes, call UpdateUnit() to recalculate the lable-size
///
protected override void OnResize(EventArgs e)
{
UpdateUnit();
base.OnResize(e);
}
///
/// Usability | On enter select everything
///
protected override void OnEnter(EventArgs e)
{
this.Select(0, this.Text.Length);
base.OnMouseEnter(e);
}
///
/// If, when leaving, text ends with a seperator, cut it out
///
protected override void OnLeave(EventArgs e)
{
if(this.Text.EndsWith(System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator))
{
this.Text = this.Text.Substring(0, this.Text.Length - 1);
}
base.OnLeave(e);
}
}
我的问题:
标签目前覆盖了盒子的末端。因此,如果输入的值很大(或大小很低),它就会被标签覆盖,如下所示:
我知道当输入的值长于输入框的大小时,NumericUpDown
具有类似滚动功能的功能。这是在框的末尾触发的。
是否有可能为框内的文本设置类似填充 的内容?例如,将右侧的填充设置为我的标签大小?
我非常喜欢这个自定义控件,但最后一件事很烦人。
不幸的是,我不知道如何查找现有控件的属性,例如,有一个名为 UpdateEditText()
的方法。也许有人可以告诉我如何查找这个基本函数/属性。
非常感谢!
câu trả lời hay nhất
NumericUpDown
是一个继承自 UpDownBase
的控件复合控制。它包含一个 UpDownEdit
và một UpDownButtons
控制。 UpDownEdit
是一个 TextBox
。您可以更改控件及其子控件的外观。例如,您可以将 Label
添加到文本框控件并将其停靠在 TextBox
的右侧,然后通过发送 EM_SETMARGINS
来设置文本框的文本边距。得到这样的结果的消息:
mã số
sử dụng Hệ thống;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class ExNumericUpDown : NumericUpDown
{
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
private const int EM_SETMARGINS = 0xd3;
private const int EC_RIGHTMARGIN = 2;
private Label label;
public ExNumericUpDown() : base()
{
var textBox = Controls[1];
label = new Label() { Text = "MHz", Dock = DockStyle.Right, AutoSize = true };
textBox.Controls.Add(label);
}
public string Label
{
get { return label.Text; }
set { label.Text = value; if (IsHandleCreated) SetMargin(); }
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
SetMargin();
}
private void SetMargin()
{
SendMessage(Controls[1].Handle, EM_SETMARGINS, EC_RIGHTMARGIN, label.Width << 16);
}
}
关于c# - 带单位的 NumericUpDown |自定义控件 |字段填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37947251/
Tôi muốn triển khai tìm kiếm tùy chỉnh nhưng tôi gặp phải sự cố. Tôi cần kết hợp UIButton, SearchBar trong một điều khiển để có thể tham chiếu nó qua con trỏ. Sau đó, tôi sẽ tự động thêm nhiều nút UI vào điều khiển kết hợp này. Điều quan trọng nhất là tôi muốn
Nó không thực thi câu lệnh trong khối if trong phương thức của tôi Trang chính:- Sự kiện tải trang:- Control c = new Control();
Điều khiển ComboBox có phương thức setConverter, xem JavaFX ComboBox - Hiển thị văn bản nhưng trả về ID khi lựa chọn để biết ví dụ. Tôi
Tôi không tìm thấy bất kỳ thư viện wpf nào chứa các điều khiển để nhập văn bản mã thông báo (đánh dấu). Có lẽ tôi không thể tìm thấy thư viện vì tôi gọi thành phần này không chính xác. Nó được gọi là gì hoặc thư viện như vậy ở đâu? Câu trả lời hay nhất Thư viện DevExpress WPF chứa nhiều điều khiển chỉnh sửa dữ liệu
Có điều khiển Silverlight nào cho phép bạn nhập văn bản và đánh dấu nó dưới dạng mã không? Ví dụ: foreach (client inClient){ client.Save();} sẽ trở thành
Tôi có các điều khiển người dùng sau a) Panel.ZIndex="99999999" Điều khiển này có được đặt thành giá trị chính xác của Topmost trong điều khiển không?
Có thể sử dụng C# trong Windows Forms để ẩn tất cả các điều khiển cụ thể, chẳng hạn như nhãn hoặc nút, khi biểu mẫu tải và sau đó chọn hiển thị những điều tôi không muốn hiển thị không? Tôi có một chương trình có rất nhiều nút và tab nhưng khi tải tôi chỉ muốn hiển thị một hoặc hai tab và tôi cảm thấy điều đó đối với mỗi tab
Câu hỏi này đã có câu trả lời: Đã đóng cửa 11 năm trước. Có thể trùng lặp: Sao chép các thành phần trong thời gian chạy Tôi có TMyControl (Contro
Tôi đang cố gắng viết một thư viện dll ở Delphi có chứa hàm tạo phiên bản con của TFrame và trả về nó. Nhưng khi tôi nhập hàm này vào ứng dụng của mình, mỗi lần tôi gọi nó, tôi lại nhận được một ngoại lệ như "Điều khiển 'xxx' không
Có lệnh gọi API Win32 nào để xác định cửa sổ và/hoặc điều khiển nào hiển thị ở tọa độ và/hoặc chuột cụ thể không? Câu trả lời hay nhất Bạn có thể sử dụng GetWindowFromPoint. Nó sẽ trả về tay cầm cửa sổ để bạn có thể sử dụng GetClassNa
Tôi cần nhập công thức sau vào điều khiển chỉnh sửa: Công thức được tạo trong MS Word. Sau khi cố gắng sao chép/dán nó vào điều khiển chỉnh sửa (một hoặc nhiều dòng), tôi nhận được M 0,33 Q10T9.1-9.7. Khi tôi gõ cái này tôi đang làm việc trên Rich
Tôi chỉ đang cố gắng thêm thành công nó vào cửa sổ của mình nhưng điều đó thật khó khăn. Tôi đã thử #include "windef.h" #include "winbase.h" #include "initguid.h" #i
Tôi muốn có nút "Chế độ xem phố" của riêng mình bằng API Google Maps v3. Khi nhấp vào nút, tôi muốn nó tải chế độ xem phố dựa trên vĩ độ và kinh độ của điểm đánh dấu. Sau đó, tôi muốn nút thay đổi thành "Quay lại bản đồ" và sau đó tải lại chế độ xem bản đồ mặc định
Tôi hiện đang phát triển (một) CMS nguồn mở khác bằng PHP và tôi muốn sử dụng các điều khiển javascript, cụ thể là bảng quản trị. Câu hỏi đặt ra là có bất kỳ điều khiển mã nguồn mở nào, có thể phân phối tự do với giao diện PHP để tạo j không?
Một trong những sản phẩm tôi viết phần mềm là ứng dụng kế toán. Nó được viết bằng C++, sử dụng các điều khiển C++ Builder và VCL, đồng thời kết nối với cơ sở dữ liệu PostgreSQL chạy trên Linux. Dữ liệu PostgreSQL
Tôi đang sử dụng Trình nghe khóa để đọc thông tin đầu vào của người dùng nhưng tôi gặp sự cố. Đầu tiên tôi đọc JTextField "Vui lòng nhập tên của bạn". Nếu người dùng nhập tên, chẳng hạn như John, nó sẽ đổi thành John. Tuy nhiên, nếu người dùng nhập
Tôi đang cố gắng căn chỉnh các hộp kiểm trong một cột có thể định dữ liệu (h=center, v=middle)... nhưng các hộp kiểm vẫn xuất hiện sai vị trí (xem hình ảnh đính kèm)
Tôi có cây dữ liệu JSON chứa số liệu thống kê: { prefix: "a", count: 20, Children: [ { prefix: "a:b", c
Tôi đã thiết kế một mô hình bằng Photoshop mà tôi dự định áp dụng cho điều khiển ListView cho danh mục sản phẩm của mình nhưng có vẻ như nó không hiển thị chính xác (bị căn chỉnh sai?) và tôi hy vọng ai đó ở đây có thể chỉ ra lỗi mà tôi đang cố gắng làm như tôi đã làm Tìm hiểu cũng chẳng ích gì. hy vọng
Bạn đang sử dụng điều khiển ASP.NET hay chỉ HTML với CSS? Tôi đang gặp một số vấn đề với độ rộng của TextBox và DropDownList. Trong các trình duyệt khác nhau, chiều rộng sẽ khác nhau và kích thước của điều khiển sẽ không giống nhau.
Tôi là một lập trình viên xuất sắc, rất giỏi!