我通过实现这个简单的代码得到了一个错误。我不明白我在哪里做错了。
//错误
ImageCSharp.exe中发生了未处理的“System.NullReferenceException”类型异常 附加信息:Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt。
我可以获得剪贴板文字,但为什么我无法获取/设置图像。
// CODE
public void copy()
{
// Determine the active child form.
fImage activeChild = this.ActiveMdiChild as fImage;
if (activeChild != null)
{
PictureBox mypicbox = activeChild.picbox;
string win_name = activeChild.Tag.ToString();
Clipboard.SetImage(mypicbox.Image);
Clipboard.SetText(win_name);
}
}
private void paste()
{
Image im= Clipboard.GetImage();
this.pictureBox1.Image = im;
MessageBox.Show(im.Size.ToString());
}
的问候,
答案 0 :(得分:1)
不是您的问题的答案,但以下不会将图像和文本设置到剪贴板。即您的代码将文本设置为剪贴板
Clipboard.SetImage(mypicbox.Image);
Clipboard.SetText(win_name);
上面的代码试图将图像设置到剪贴板,然后是文本 即剪贴板将包含一个项目,根据您的代码是文本。
我假设因为paste
中的代码要求图像在剪贴板中,所以MessageBox.Show(img.Size.ToString());
上会抛出异常。
答案 1 :(得分:1)
Clipboard.SetText(win_name);
将图像从剪贴板中转储出来,它只能容纳一个项目。删除该行以解决您的问题。并且防守代码:
private void paste() {
if (Clipboard.ContainsImage()) {
Image im = Clipboard.GetImage();
if (this.pictureBox1.Image != null) this.pictureBox1.Dispose();
this.pictureBox1.Image = im;
}
}
要在剪贴板上获取两条信息,首先要声明一个小帮助程序类来存储此信息。例如:
[Serializable]
private class Clipdata {
public Image Image { get; set; }
public string Name { get; set; }
}
private void CopyButton_Click(object sender, EventArgs e) {
var data = new Clipdata { Image = pictureBox1.Image, Name = textBox1.Text };
Clipboard.SetDataObject(data);
}
private void PasteButton_Click(object sender, EventArgs e) {
string fmt = typeof(Clipdata).FullName;
if (Clipboard.ContainsData(fmt)) {
var data = (Clipdata)Clipboard.GetDataObject().GetData(fmt);
if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
pictureBox1.Image = data.Image;
textBox1.Text = data.Name;
}
}