Tôi đang làm việc trên ứng dụng C# winforms (VS.NET 2008, .NET 3.5 sp 1). Tôi có một trường tìm kiếm trên biểu mẫu và thay vì có nhãn bên cạnh trường tìm kiếm, tôi muốn hiển thị một số văn bản màu xám trong nền của trường tìm kiếm (ví dụ: 'Cụm từ tìm kiếm'). Khi người dùng bắt đầu nhập văn bản vào trường tìm kiếm, văn bản sẽ biến mất. Làm thế nào tôi có thể đạt được điều này?Hiển thị gợi ý cho điều khiển chỉnh sửa winforms C#
Trả lời
Bạn sẽ cần phải sử dụng một số mã tương tác P/Inovke để thực hiện việc này. Hãy tìm hàm Win32 API SendMessage
và thông báo EM_SETCUEBANNER
.
Có chức năng tích hợp trong điều khiển hộp văn bản - AutoCompleteMode và AutoCompleteSource. Chúng có thể đáng để thử trước khi bạn đi vào tùy chỉnh hoặc kiểm soát của bên thứ ba.
Hãy thử mã từ liên kết này. Nó mở rộng chức năng winforms, vì nó không thể đạt được quyền ra khỏi hộp. Mã nguồn cũng có sẵn. Hãy ghi nhớ, nó chỉ hoạt động trên Win XP hoặc cao hơn.
http://www.aaronlerch.com/blog/2007/12/01/watermarked-edit-controls/
Tôi nghĩ rằng cách này thường được thực hiện là để thiết lập màu sắc của văn bản sang màu xám và điền trước nó với văn bản gợi ý của bạn.
Sau đó, viết trình xử lý cho các sự kiện tiêu điểm của trường văn bản, sửa đổi nội dung của trường và màu sắc dựa trên tiêu điểm được lấy và mất. Dưới đây là một số giả (xin lỗi, nó hoàn toàn không mã C# Tôi đã Actionscript trên não ngay bây giờ.):
TextInput myInput;
boolean showingHint = true;
myInput.text = "Search Terms";
myInput.color = 0xcccccc;
myInput.onFocusGained = function() {
if(showingHint) {
myInput.text = "";
myInput.color = 0x000000;
showingHint = false;
}
}
myInput.onFocusLost = function() {
if(!showingHint && myInput.text.length == 0) {
myInput.text = "Search Terms";
myInput.color = 0xcccccc;
showingHint = true;
}
}
Hãy nhớ rằng, bạn chỉ muốn thay đổi các văn bản trên tập trung bị mất nếu người dùng đã không tự thay đổi bản văn. Sử dụng một boolean riêng để theo dõi nếu bạn đang hiển thị gợi ý hay không để bạn có thể phân biệt giữa người dùng bằng cách nhập văn bản "gợi ý" theo cách thủ công của bạn dưới dạng nội dung thực tế. Tương tự như vậy, bạn chỉ muốn xóa nội dung của hộp nhập liệu nếu gợi ý đang được hiển thị để bạn không bị vô tình loại bỏ đầu vào của người dùng.
Tốt hơn nên đăng mã thay vì liên kết. Tôi đang đăng nội dung này từ here
//Copyright (c) 2008 Jason Kemp
//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions:
//The above copyright notice and this permission notice shall be included in
//all copies or substantial portions of the Software.
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//THE SOFTWARE.
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Text;
public static class Win32Utility
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern Int32 SendMessage(IntPtr hWnd, int msg,
int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
[DllImport("user32.dll")]
private static extern bool SendMessage(IntPtr hwnd, int msg, int wParam, StringBuilder lParam);
[DllImport("user32.dll")]
private static extern bool GetComboBoxInfo(IntPtr hwnd, ref COMBOBOXINFO pcbi);
[StructLayout(LayoutKind.Sequential)]
private struct COMBOBOXINFO
{
public int cbSize;
public RECT rcItem;
public RECT rcButton;
public IntPtr stateButton;
public IntPtr hwndCombo;
public IntPtr hwndItem;
public IntPtr hwndList;
}
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
private const int EM_SETCUEBANNER = 0x1501;
private const int EM_GETCUEBANNER = 0x1502;
public static void SetCueText(Control control, string text)
{
if (control is ComboBox)
{
COMBOBOXINFO info = GetComboBoxInfo(control);
SendMessage(info.hwndItem, EM_SETCUEBANNER, 0, text);
}
else
{
SendMessage(control.Handle, EM_SETCUEBANNER, 0, text);
}
}
private static COMBOBOXINFO GetComboBoxInfo(Control control)
{
COMBOBOXINFO info = new COMBOBOXINFO();
//a combobox is made up of three controls, a button, a list and textbox;
//we want the textbox
info.cbSize = Marshal.SizeOf(info);
GetComboBoxInfo(control.Handle, ref info);
return info;
}
public static string GetCueText(Control control)
{
StringBuilder builder = new StringBuilder();
if (control is ComboBox)
{
COMBOBOXINFO info = new COMBOBOXINFO();
//a combobox is made up of two controls, a list and textbox;
//we want the textbox
info.cbSize = Marshal.SizeOf(info);
GetComboBoxInfo(control.Handle, ref info);
SendMessage(info.hwndItem, EM_GETCUEBANNER, 0, builder);
}
else
{
SendMessage(control.Handle, EM_GETCUEBANNER, 0, builder);
}
return builder.ToString();
}
}
- 1. Hiển thị gợi ý
- 2. C# Winforms: Hiển thị Hiệu quả Nhiều Điều khiển
- 3. Làm cách nào để hiển thị gợi ý cho điều khiển bị vô hiệu hóa?
- 4. lập trình gợi ý chỉnh sửa văn bản trong android?
- 5. EditText gợi ý không hiển thị
- 6. Ẩn gợi ý "Hiển thị vấn đề" trong studio android
- 7. Điều khiển ComboBox nhiều cột cho Winforms
- 8. Nút Winforms: Hiển thị = false ngụ ý Bật = false?
- 9. Hiển thị động mục menu Chỉnh sửa khối điều khiển trong SharePoint
- 10. Phím tắt cho gợi ý
- 11. Làm thế nào để hiển thị gợi ý kiểu bóng của Vista trong Delphi?
- 12. Gợi ý cho KSPA trên đồ thị vô hướng
- 13. Hiển thị phân cấp điều khiển trong trình thiết kế WinForms
- 14. Google thích chỉnh sửa/kết hợp điều khiển cho Delphi?
- 15. Điều khiển hiển thị trên một bảng điều khiển khác
- 16. Hiển thị điều khiển người dùng trong DatagridViewCell
- 17. Git Hiển thị cho trình chỉnh sửa khác nhau
- 18. Gợi ý cho Grails .gitignore
- 19. Sử dụng điều khiển WPF tùy chỉnh trong WinForms
- 20. Đường cơ sở trong các điều khiển Winforms tùy chỉnh
- 21. Các gợi ý về chức năng Vim cho C
- 22. Gợi ý để duy trì tệp dự án Visual Studio vcproj trong điều khiển phiên bản
- 23. Làm cho chủ đề tùy chỉnh sử dụng nền không có (gợi ý gợi ý của Android)
- 24. Hiển thị/Ẩn cửa sổ bảng điều khiển của ứng dụng giao diện điều khiển C#
- 25. Điều khiển WPF trong Winforms
- 26. Lỗi làm tròn khi thu nhỏ đầu ra được hiển thị của điều khiển chỉnh sửa phong phú qua EM_FORMATRANGE
- 27. C# WinForms thuộc tính mặc định của điều khiển tùy chỉnh
- 28. Sử dụng cùng một Trình điều khiển Chế độ xem để thêm, hiển thị và chỉnh sửa
- 29. Thêm cột siêu kết nối cho điều khiển DataGrid Winforms
- 30. C# WinForms Căn chỉnh dọc cho TextBox, v.v.