![](/img/trans.png)
[英]Cant find the “desing view” on stetic (Monodevelop + C#) when i add a new window to my solution
[英]Monodevelop keeps crashing when I add an image into a gtk window using the pixbuf option in the properties window
我正在為學校的家庭作業項目制作一個簡單的應用程序,並嘗試添加圖像,但是每次執行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(在這種情況下為MonoDevelop)聯系在一起。 圖形工具箱比以前直觀得多,而且很多時候了解如何使用它們是微不足道的。
這是一個僅在窗口中顯示圖像的項目的完整代碼。
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();
}
}
為了使該代碼起作用,您必須執行以下操作:
下載圖片。 我下載了有關自動機器人PROWL的圖像,並將其稱為prowl.jpg,但是您當然可以選擇任何內容。
通過MonoDevelop在項目中創建目錄(右鍵單擊該項目,然后選擇“新文件夾”)。
將圖像復制到該文件夾:右鍵單擊新創建的文件夾(我稱該文件夾為“ res”),然后選擇“添加文件”,在MonoDevelop詢問要執行的操作時,將圖像復制到該文件夾。
右鍵單擊圖像,然后選擇“快速屬性>>復制到輸出目錄”。 這將使BuildExternalImage()
方法起作用。 如果您不打算使用外部圖像,則可以跳過此步驟。 考慮到這種方式,您必須將映像與可執行文件一起分發(在名為“ res”的目錄中)。
右鍵單擊該圖像,然后選擇“構建操作>> EmbbeddedResource”。 這將使方法BuildEmbeddedImage()
起作用。 該映像將位於您的可執行文件內,無需擔心其他任何事情。 唯一需要注意的是,在BuildEmbeddedImage
,您必須使用項目名稱,帶有圖像的目錄名稱以及圖片。 例如,如果您的項目名為“ HomeWork”,您將文件夾創建為“ res”,並且圖像是“ myfamily.jpg”,那么結果字符串將是“ HomeWork.res.myfamily.jpg”
如果您堅持使用設計器,則:
在Gtk#2.0部分的MonoDevelop中創建一個新項目
轉到MainWindow.cs並進入設計器。
從要設計的窗口內的工具箱中拖放一個Image小部件。 MonoDevelop會抱怨您使用小部件而不是容器(例如VBox),然后在其中使用小部件。 繼續進行任何選擇。
選擇圖像小部件,然后轉到屬性,展開“圖像屬性”。 在pixbuf中,單擊“ ...”按鈕。 轉到資源文件夾。 點擊“添加”,然后選擇您的圖片。 MonoDevelop將為您完成繁重的工作,並且圖像將立即出現在設計器中。
點擊“運行”。
老實說,MonoDevelop在第一次執行時就崩潰了,但是在再次打開項目時看起來很穩定。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.