示例场景:从 Microsoft Word 复制一行时,它会被复制到剪贴板,并且文本也可以粘贴到记事本和其他内容。
我的问题:我想开发一个可以从 MySQL 数据库复制元组的应用程序。从复制的元组中,每一列的数据应存储在一个数组中,并且在粘贴到另一个应用程序的文本框时,必须为每个文本框粘贴一个数据,直到元组末尾。
即应用程序有一个包含 5 个文本框的表单:textbox1、textbox2、textbox3、textbox4、textbox5,数据库表有 5 列,其中存储了数据。
设计的应用程序将显示数据库中的数据,并且在复制元组时,它必须以 a[0]、a[1]、a[2]、a[3]、a[4] 的形式存储在数组中。然后,将其粘贴到具有这 5 个文本框的另一个应用程序时,只有 a[0] 的数据必须存储到 textbox1,只有 a[1] 的数据必须存储到 textbox2,依此类推。
这能实现吗?如果可以的话,这个问题怎么解决。如果我问得太多,请原谅我。
问候, 尼朋释迦
最佳答案
嗯,你显然不能让你的用户直接与 mySql 交互,但我想这不是你的意思?
你可以控制两端,源端和目标端吗?如果是这样,您所需要做的就是决定可以放入剪贴板并再次检索的格式
这是一个帮助您入门的简单示例。
仅用于演示,它使用 ListView
以及Ctl-C
将每个项目的文本复制到 Clipboard
,用垂直标签将它们分开。
根据 Ctl-V
在文本框中,所有这些字符串都被再次拆分,并且每个字符串都插入到单独的行中。
private void lv_files_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control)
{
string data = "";
foreach (ListViewItem lvi in lv_files.Items) data += lvi.Text + "\v";
Clipboard.SetData(DataFormats.Text, data); ;
e.Handled = true;
}
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
string data = Clipboard.GetData(DataFormats.Text).ToString();
var parts = data.Split('\v');
foreach (string p in parts) textBox1.Text += p + "\r\n";
Clipboard.Clear();
e.Handled = true;
}
}
这应该通过以下功能进行扩展:
- 也照顾一下
Shift-Insert
和Ctrl-Insert
- 根据您的实际问题进行调整:
- 而不是
ListView
使用你的来源;您无法与DataTable
进行用户交互,所以你需要一些替代控制。当然是DataGridView
我想到了,但它确实可能是一个可以集中注意力并聆听 KeyDown 的东西。 - 而不是一行
TextBox
中的几行您应该将数据放入目标TextBoxes
;也许你可以把它们放在List<TextBox>
中使访问它们变得简单..
- 而不是
关于c# - 在 C# 中从 MySQL 数据库复制粘贴到另一个程序的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25958535/