我正在为学校作业项目制作一个简单的应用程序,我正在尝试添加图像,但是每次我进行IDE崩溃时,如果我设法以某种方式进行编译,那么我继续到那个窗口,整个程序崩溃了。它不会给我一个错误,当我在终端中打开它时,没有输出。
我已经尝试使用随附的图标,我尝试将其导入项目目录,并且我尝试将其作为指向文件的链接访问,但无济于事。
这是处理图像文件的构建部分,但我真的不知道我在做什么,因为这是我制作的第一个GTK应用程序。我可以根据需要提供更多代码段。将图像加载到程序中时,我无法提供任何代码示例,因为它立即崩溃。
// Container child hbox6.Gtk.Box+BoxChild
this.image1 = new global::Gtk.Image();
this.image1.Name = "image1";
this.hbox6.Add(this.image1);
global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox6[this.image1]));
w6.Position = 0;
w6.Expand = false;
w6.Fill = false;
// Container child hbox6.Gtk.Box+BoxChild
this.image2 = new global::Gtk.Image();
this.image2.Name = "image2";
this.hbox6.Add(this.image2);
global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox6[this.image2]));
w7.Position = 1;
w7.Expand = false;
w7.Fill = false;
this.hbox3.Add(this.hbox6);
global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.hbox6]));
w8.Position = 0;
w8.Expand = false;
w8.Fill = false;
// Container child hbox3.Gtk.Box+BoxChild
this.hbox4 = new global::Gtk.HBox();
this.hbox4.Name = "hbox4";
this.hbox4.Spacing = 6;
// Container child hbox4.Gtk.Box+BoxChild
this.image3 = new global::Gtk.Image();
this.image3.Name = "image3";
this.hbox4.Add(this.image3);
global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox4[this.image3]));
w9.Position = 0;
w9.Expand = false;
w9.Fill = false;
// Container child hbox4.Gtk.Box+BoxChild
this.image4 = new global::Gtk.Image();
this.image4.Name = "image4";
this.hbox4.Add(this.image4);
global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox4[this.image4]));
w10.Position = 1;
w10.Expand = false;
w10.Fill = false;
没有错误消息,因为整个事情只是彻底崩溃或停止响应,所以我无法提供类似的东西。任何帮助,将不胜感激。谢谢您的宝贵时间。
首先,您无需使用设计师来完成如此简单的任务。此外,设计师总是将您与给定的IDE联系起来(在这种情况下为单个(。图形工具包比以前更加直观,很多时候了解如何与它们一起工作。
这是一个项目的整个代码,该项目仅在窗口中显示图像。
class MainWindow: Gtk.Window {
public MainWindow()
:base(Gtk.WindowType.Toplevel)
{
this.Build();
this.DeleteEvent += (o, args) => Gtk.Application.Quit();
}
void Build()
{
var imgContainer = this.BuildEmbeddedImage();
this.Add( imgContainer );
}
Gtk.Image BuildExternalImage()
{
return new Gtk.Image( "res/prowl.jpg" );
}
Gtk.Image BuildEmbeddedImage()
{
var pixbufImage = new Gdk.Pixbuf(
System.Reflection.Assembly.GetEntryAssembly(),
"CSShowImage.res.prowl.jpg");
return new Gtk.Image( pixbufImage );
}
}
class Ppal
{
[System.STAThread]
static void Main()
{
Gtk.Application.Init();
new MainWindow().ShowAll();
Gtk.Application.Run();
}
}
要使该代码工作,您必须执行以下操作:
下载图像。我下载了有关Autobot Prowl的图像,并将其称为prowl.jpg,但是您可以选择任何想要的东西。
通过Monodeveloping在项目中创建一个目录(右键单击项目,然后选择"新文件夹"(。
将您的图像复制到该文件夹:右键单击新创建的文件夹(我称该文件夹为" res"(,然后选择"添加文件",将图像复制到Monodevelops询问该文件时将图像复制到该文件夹。
右键单击图像,然后选择"快速属性>>复制到输出目录"。这将使
BuildExternalImage()
方法起作用。如果不打算使用外部图像,则可以跳过此步骤。考虑到,这样,您必须使用可执行文件分发图像(在称为" Res"的目录中(。右键单击图像,然后选择"构建动作>>嵌入式Resource"。这将使方法
BuildEmbeddedImage()
起作用。图像将在您的可执行文件内部,无需担心其他任何事情。唯一的警告是,在BuildEmbeddedImage
中,而不是读取" csshowimage.res.res.prowl.jpg"的行,您必须使用项目名称,带有图像的目录名称以及图像的名称以及的名称来创建自己的字符串图像。例如,如果您的项目称为"作业",则将该文件夹创建为" res",而您的图像为" myfamily.jpg",则结果的字符串将为" hommwork.res.res.res.myfamily.jpg"
如果您坚持使用设计师,则:
在GTK#2.0部分的Monodevelop中创建一个新项目
转到mainwindow.cs然后进入设计师。
从设计的窗口内部的工具箱中删除图像小部件。Monodevelop将使用小部件代替容器(例如Vbox(抱怨您,然后将其内部的窗口小部件抱怨。继续使用任何选项。
选择图像小部件然后转到属性,展开"图像属性"。在PixBuf中,单击" ..."按钮。转到资源文件夹。单击"添加"并选择您的图像。Monodevelop将为您完成重型工作,并且图像现在将出现在设计师中。
单击"运行"。
说实话,单次发行在第一次执行时崩溃了,但在再次打开项目时似乎是稳定的。
希望这会有所帮助。