在我的應用程序中,用戶可以使用32個字符的serialnumber將其產品(從試用版升級到完整版)升級。在多個文本框中粘貼serialnumber
爲了使我的(支付)客戶儘可能地方便用戶,我希望能夠複製和粘貼序列號。
我希望我的客戶將光標置於許可證的第一個字段中,當用戶粘貼32個字符的許可證時,我希望它填充所有字段。
我不知道從哪裏開始,所以如果你能指出我會朝着正確的方向發展的話。
在我的應用程序中,用戶可以使用32個字符的serialnumber將其產品(從試用版升級到完整版)升級。在多個文本框中粘貼serialnumber
爲了使我的(支付)客戶儘可能地方便用戶,我希望能夠複製和粘貼序列號。
我希望我的客戶將光標置於許可證的第一個字段中,當用戶粘貼32個字符的許可證時,我希望它填充所有字段。
我不知道從哪裏開始,所以如果你能指出我會朝着正確的方向發展的話。
在第一個文本框中,我會提出一個很大的限制。
在'文字改變'上,檢查長度。如果變化大於4(最大值)。刪除額外的東西,並將其傳播到您的文本框。
如果您複製粘貼,它將文本更改爲32,它會工作。你也可以改變光標(我認爲它的.Focus(),但我可能是錯的),所以它會自動在這兩個盒子之間「跳躍」。
您可以將其插入第一個文本框的文本更改事件中,然後修剪&將粘貼的文本拆分爲4個組,並設置其他文本框的文本。
非常簡單,應該「只是工作」。
您可以覆蓋WndProc來捕獲粘貼事件(Windows消息)。然後只需粘貼文本,並複製到文本框中。充分的例子,深深的啓發this answer:
using System;
using System.Linq;
using System.Windows.Forms;
namespace SOPasteTextBox
{
public class ClipboardEventArgs : EventArgs
{
public string ClipboardText { get; set; }
public ClipboardEventArgs(string clipboardText)
{
ClipboardText = clipboardText;
}
}
class PasteAwareTextBox : TextBox
{
public event EventHandler<ClipboardEventArgs> Pasted;
private const int WM_PASTE = 0x0302;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PASTE)
{
var evt = Pasted;
if (evt != null)
{
evt(this, new ClipboardEventArgs(Clipboard.GetText()));
}
return;
}
base.WndProc(ref m);
}
}
static class Program
{
private static PasteAwareTextBox[] _textBoxes;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
var mainForm = new Form();
_textBoxes = Enumerable.Range(0, 8).Select(x => new PasteAwareTextBox() {Top = x*20}).ToArray();
_textBoxes[0].Pasted += DoPaste;
foreach (var box in _textBoxes)
{
mainForm.Controls.Add(box);
}
Application.Run(mainForm);
}
private static void DoPaste(object sender, ClipboardEventArgs e)
{
if (String.IsNullOrWhiteSpace(e.ClipboardText))
return;
int i = 0;
var text = e.ClipboardText.Split('-').Take(_textBoxes.Length);
foreach (string part in text)
{
_textBoxes[i++].Text = part;
}
}
}
}
我被誘惑只是回答「是」。 – driis
我從來沒有見過單獨盒子的好處。 IMO只用一個盒子沒有更多的問題。也許在手動輸入過程中自動添加破折號(或實際上是自動/粘貼)。 –
這個問題 - http://stackoverflow.com/questions/1156975/copy-paste-event-listener-in-c-sharp有一些關於在c#中設置剪貼板事件偵聽器的信息。但看起來相當複雜。 – ipr101