这真的很烦人.我正在使用标签作为列表项用户控件的一部分,用户可以单击它来选择列表项并双击它以重命名它.但是,如果剪贴板中有名称,则双击标签会将其替换为标签文本!
我还检查了应用程序中的其他标签,他们也将双击复制到剪贴板.我没有在这个程序中编写任何剪贴板代码,我正在使用标准的.NET标签.
有没有办法禁用此功能?
我有一个使用剪贴板的程序,但我希望在完成后将剪贴板恢复到以前的状态.
这是我的代码:
IDataObject temp = Clipboard.GetDataObject();
//Some stuff that change Cliboard here
Clipboard.SetText("Hello");
//Some stuff that change Cliboard here
Clipboard.SetDataObject(temp);
Run Code Online (Sandbox Code Playgroud)
但是,如果我复制一个文本,并运行此代码,我在记事本上什么也得不到.
注意:我不能使用Clipboard.Contains,因为我想保留剪贴板EXACLY之前的状态,即使用户复制了一个文件.
当我在visual studio中搜索整个项目中的"剪贴板"这个词时,我找不到匹配项.
但不知怎的,我的程序似乎正在改变我的剪贴板的内容,以等于我的窗体上的控件的.text属性.怎么会这样?
我已经确定了处理程序,之后我的剪贴板似乎总是被更改,并添加了一个消息框以从剪贴板中获取文本以尝试识别何时可以更改它.
MessageBox.Show(Clipboard.GetText)
Run Code Online (Sandbox Code Playgroud)
即使在子处理事件的顶部,我的剪贴板也已更改为控件的.text属性.这是处理此事件的唯一子,并且剪贴板在此事件后始终更改.
这是一个用vb.net编写的小型winforms项目.
更多信息:
当我点击它时,我的剪贴板被设置为标签的.text属性.标签在这里制作:
For i = 0 To lstTupChildren.Count - 1
Dim lbl As New Label()
lbl.Size = New System.Drawing.Size(250, 25)
lbl.Font = New System.Drawing.Font("Calibri (body)", 10)
lbl.Text = i + 1 & ". " & lstTupChildren(i).Item1
lbl.Location = New System.Drawing.Point(0, 25 * i)
If lstTupChildren(i).Item3 = True Then lbl.BackColor = Color.GreenYellow Else lbl.BackColor = Color.Orange 'sets the colour depending on whether the timesheet is active'
Me.Controls.Add(lbl)
AddHandler lbl.DoubleClick, AddressOf subChangeTimesheetState 'adds handler for …Run Code Online (Sandbox Code Playgroud) 我编写了一个小应用程序作为测试,以查看Excel VSTO的功能.但是,我遇到了一个问题.
当我启动Excel时,我的剪贴板被清除.我通过谷歌追踪这个问题是加载项(特别是COM加载项)的问题,如果未正确初始化将自动清除剪贴板.对我来说不幸的是,我不知道如何在VSTO中保留剪贴板,谷歌也没什么帮助.我没有调用任何明显清除剪贴板的功能.ThisAddin函数中唯一的东西是if/else块,它从一些属性读取并设置一些标志.
我仔细研究了将剪贴板上的数据复制到某个对象的想法,然后只是替换它,但这看起来非常hacky,可能无法正常工作.
任何人都可以了解我的VSTO在Excel启动时如何/为何清除剪贴板以及如何解决它?
编辑:
在进行了更深入的跟踪之后我认为它是我的测试加载项是错误的.我发现它是Team Add-In或Adobe Contribute.考虑到Adobe对这些事情的记录,我会继续说它可能是贡献加载项.谢谢各位的回应.这将教我使用Excel的非vanilla安装进行VSTO练习.
我将打开此主题,以便更多人可以为VSTO Excel加载项(或办公套件的任何加载项)在启动时清除剪贴板的可能原因做出贡献.
我有一个TextBox我绑定一个字符串,如果我现在手动编辑文本我将能够通过撤消这些更改TextBox.Undo(),如果我更改字符串和TextBox的文本更新,我无法撤消这些更改,该TextBox.CanUndo属性将始终是false.
我想这可能与完全替换文本而不是修改它有关.
关于如何让这个工作的任何想法?