Inhoudsopgave
GTK # door middel van containers stelt ons in staat om de positie van de widgets in een venster te controleren om het ontwerp te kunnen maken. Deze containers hebben verschillende kenmerken en dienen om het ontwerp en de plaatsing van de componenten of widget binnen een venster te begeleiden.De hoofdcontainers zijn:
- Containers met horizontale of verticale dozen
- Containers met tafels
- Vaste container
- Frames of Framecontainer
Hoe de containers te gebruiken volgens de behoeften of vereisten van onze applicatie?
Containers met horizontale of verticale dozen
Als we gewend zijn te programmeren onder Windows en de ontwerpmethode voor het slepen en neerzetten van de interface, is dit type container waarschijnlijk beter omdat de widgets of componenten in het venster worden gepositioneerd met behulp van x-coördinaten, en hoe in Windows en dat wordt op prijs gesteld.
Hoewel dit mogelijk is met Gtk en monodevelop, is de beste manier om de widgets uit te lijnen met de vakken. Er zijn twee soorten dozen: horizontaal of HBox en verticaal of VBox. Dit type container is niet afhankelijk van de schermgrootte. De HBox- en VBox-containers zorgen voor het automatisch vergroten of verkleinen van de zone die een component inneemt.
Laten we een voorbeeld bekijken met horizontale of verticale vakken. We zullen een C # en Gtk-project maken in Monodevelop.
We wijzen het een Vbox-container toe en in de laatste rij voegen we een Hbox-container toe.
Dit type container is een raster met rijen en kolommen dat handig kan zijn wanneer we een raster moeten maken waarin we widgets kunnen plaatsen, zoals een gegevensinvoerscherm. Laten we een voorbeeld met een tabel bekijken. We zullen een C#- en Gtk-project maken in Monodevelop, we zullen een gegevensinvoerformulier maken.
We ondertekenen een Vbox-container en in de laatste rij voegen we een Hbox-container toe, net als in het vorige project voegen we een menubalk toe en de onderstaande knoppen, in het midden voegen we een tabelcontainer toe.
Laten we de laatste rij verwijderen en dan zullen we in de eerste cel van de eerste rij een Vox-container voor de labels toevoegen. Vervolgens voegen we in de tweede cel van de eerste rij een Vox-container toe voor de invoer- of tekstvakken.
Nu zullen we een . toevoegen label Foto en een widget Bestandskiezer Knop om het bestand te selecteren. Ook in de derde rij van de tabel zullen we een afbeeldingswidget toevoegen die de foto zal tonen, we moeten er rekening mee houden dat de afbeelding zich in dit geval in de compilatiemap van de applicatie bevindt Debuggen die automatisch wordt gegenereerd bij het uitvoeren. De geselecteerde afbeelding is 100px hoog bij 100px breed.
Met vaste containers kunnen we widgets slepen en neerzetten op vaste posities en met vaste afmetingen. Deze container voert geen automatisch lay-outbeheer uit en wijzigt ook het formaat van de widgets niet. Ze worden gebruikt in sommige toepassingen waar widgets nodig zijn die later door code zullen worden beheerd, zoals games, gespecialiseerde toepassingen die werken met diagrammen of afbeeldingen zoals OpenGL of 3D.
Laten we een voorbeeld bekijken waarin we een vaste container en verschillende afbeeldingen plaatsen.
Frames of Framecontainer
Frames of Frames zoals in Visual Studio het Groupbox-besturingselement wordt gebruikt, ze worden gebruikt om een groep widgets binnenin te bevatten. Het doel van een frame is om groepswidgets te definiëren op categorieën of gerelateerde secties, optioneel kan het een titel hebben. De positie van de titel en de stijl van het vak configureren vanuit de eigenschappen.
Het label van de titel verschijnt in de linkerbovenhoek van het frame. Als er geen titel is geplaatst, is deze leeg en wordt de titel niet weergegeven. De labeltekst kan worden gewijzigd met de Labeleigenschap.
In een Kader u kunt elk van de bovenstaande containers combineren en vice versa.
Laten we een scherm maken Meester / Detail, met behulp van kaders. We zullen een maken C # en Gtk-project in Monodevelop en we ondertekenen een Vbox-container met 4 rijen en de eerste rij voegen we a . toe Menubalk,
In de tweede rij voegen we een framecontainer toe, de titel van het label is producten en we wijzen het een gearceerd randtype IN toe.
In de derde rij van de Vbox plaatsen we een scheidingsbalk met de Horizontal Separator-widget en in de laatste rij van de Vbox plaatsen we nog een frame en een Treeview.
public MainWindow (): basis (Gtk.WindowType.Toplevel) {Build (); // Ik maak de kolommen en koppen van de treeview // Ik maak de productkolom Gtk.TreeViewColumn Product col = new Gtk.TreeViewColumn (); colProducto.Title = "Product"; // Ik maak de voorraadkolom Gtk.TreeViewColumn colStock = new Gtk.TreeViewColumn (); colStock.Title = "Voorraad"; // Ik maak de prijskolom Gtk.TreeViewColumn pricecol = new Gtk.TreeViewColumn (); colPrice.Title = "Prijs"; // Ik voeg de kolommen toe en geef ze een titel in de treeview tvwlista.AppendColumn (colProduct); tvwlista.AppendColumn (colStock); tvwlista.AppendColumn (prijskolom); // Ik maak een gegevensmodel om op te slaan en waar ik drie gegevens van het type tekst toevoeg Gtk.ListStore store = new Gtk.ListStore (typeof (string), typeof (string), typeof (string)); // Ik wijs het model toe aan de TreeView tvwlista.Model = store; // Ik voeg gegevens toe aan de modelwinkel.AppendValues ("TABLET SAMSUNG", "5", "175"); winkel.AppendValues ("MACBOOK PRO", "10", "2680"); store.AppendValues ("SEGATE SCHIJF 1 TB", "10", "85"); // We maken een cel die het product Gtk.CellRendererText productCell = new Gtk.CellRendererText (); // We voegen de productdatacel toe colProduct.PackStart (productCell, true); // Voeg de voorraadgegevenscel toe Gtk.CellRendererText cellStock = new Gtk.CellRendererText (); colStock.PackStart (cellStock, true); // Voeg de prijsgegevenscel toe Gtk.CellRendererText PriceCell = new Gtk.CellRendererText (); pricecol.PackStart (priceCell, true); // We voegen de gegevenscellen toe aan elke kolom en de rijen worden gegenereerd // colProducto.AddAttribute (cellProducto, "text", 0); colStock.AddAttribute (cellStock, "tekst", 1); priceCol.AddAttribute (priceCell, "tekst", 2); }Vervolgens voeren we het uit en het resultaat is het volgende: