Jak dostosować ilość buttonów do podanych wartości przez użytkownika?

0

Witam!

Może tytuł nie jest jasny, więc spróbuję wytłumaczyć:

Chcę napisać program wspomagający pracę na działce tj. wyświetla dane nt. poszczególnych roślin, szkodników, chorób roślin itd. To z czym mam jak na razie problem jest to, że wyobraźmy sobie to, że użytkownik przy uruchomieniu programu podaje informacje ile na ile ma metrów/arów działka (do dopracowania). Mój problem jest taki, że chcę by się pokazywała odpowiednia ilość buttonów przy wpisywaniu wielkości działki np.: 20 buttonów na 20 buttonów przy założeniu, że działa ma 2 ary itd. Jak to zrobić? BTW Każdy button ma być odpowiednikiem kawałka ziemi tj. będzie bardzo mały i przy jego kliknięciu wybiera się co jest zasiane/znajduje się w danym miejscu na działce. (chciałbym też dodać po bokach rozmiary działki w metrach). Czy jest to możliwe i jeśli tak to jak to rozwiązać. Z góry dzięki. Jak jakieś pytania to proszę pisać. Język to c# ofc w visualu.

0

nie iść tą drogą - 400 przycisków to naprawdę jest zły pomysł. Zamiast tego użyć jakiegoś komponentu *Grid i go sobie pomalować samemu. BTW WinForms, WPF czy UWP

0

W sumie to nie wiem, które z tych trzech będzie najlepsze do tego? Jakieś sugestie, które wybrać? Co do grida jak Ty to widzisz (w sensie kod)?

0

Pytanie jest inne - w czym (jeśli w ogóle jakieś posiadasz) masz już doświadczenie?

Oraz drugie - czy to ma być jednorazowy strzał na potrzeby własne, czy chcesz mocniej iść w programowanie? Bo jeśli chcesz tylko zrobić tą apkę i zapomnieć o temacie, to może RAD studio od Embarcadero? Mają wersję darmową C++Buildera, która na Twoje potrzeby całkowicie jest wystarczająca, a podejście RAD bardzo ułatwi Ci pracę.

0

Ogólnie to jest program na pracę inżynierską. W sumie z tych trzech najwięcej programowałem w WPF i WF (ale najlepiej wspominam czasy w WF), ale to było dawno temu i nieprawda. Moje studia tak kulały, że do tej pory nie wiem jaka jest różnica między tymi trzema wyborami (poziom nauczania, nie zaś moje lenistwo).

0

Dodałem załącznik, by przedstawić jaki chcę osiągnąć końcowy efekt tj. żeby minimapa pokazywała jaki typ został wybrany przez użytkownika np.: czy to jest ziemia, roślina, element typu płot itd. Nadal nie wiem jak to zaprogramować, by miało to ręce i nogi. Dodatkowo nie wiem jak zrobić, by program przycinał/rozszerzał obszar działki (przyjmijmy, że domyślnie jest 50 m x 50 m i użytkownik może to dowolnie zmienić). Jakieś pomysły/propozycje/sugestie/uwagi/pytania/podpowiedzi? Jak coś chcę to zrobić w C#, w winforms, bo tu najczęściej programowałem (choć mogą być pozostałe typy). Z góry dziękuję za odpowiedzi.

2

Polecam w WPF, bardzo łatwo to zamodelować:

<Window x:Class="WpfApp5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp5"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

	<ItemsControl ItemsSource="{Binding Fields}" >
		<ItemsControl.ItemTemplate>
			<DataTemplate>
				<Button Content="{Binding No}" Background="{Binding Background}" />
			</DataTemplate>
		</ItemsControl.ItemTemplate>
		<ItemsControl.ItemsPanel>
			<ItemsPanelTemplate>
				<UniformGrid  Columns="{Binding Columns}" />
			</ItemsPanelTemplate>
		</ItemsControl.ItemsPanel>
	</ItemsControl>

</Window>
using System.Windows;
using System.Windows.Media;

namespace WpfApp5
{

    public class Field
    {
        public int No { get; set; }
        public Brush Background {get; set;} 
    }


    public partial class MainWindow : Window
    {     

        public int Columns { get; set; } = 7;
        public int Rows { get; set; } = 7;
        public Field[] Fields { get; set; }


        public MainWindow()
        {
            InitializeComponent();

            Fields = new Field[Rows * Columns];
            for (int i = 0; i < Fields.Length; i++)
            {
                Fields[i] = new Field();
                Fields[i].No = i + 1;
                byte blue = (byte)((255 - (i * 5)) % 256);
                byte green = (byte)(((i * 5)) % 256);
                Fields[i].Background = new SolidColorBrush(Color.FromArgb(255, 0, green, blue));
               
            }

            this.DataContext = this;
        }
    }
}

title

0

Dziękuję za odpowiedź. A da się, żeby liczbę kolumn i wierszy brało z podanych 2 wartości podanych przez użytkownika?

0

Czy jest możliwe zaprogramowanie tak kodu, że po wybraniu z listboxa jakieś "wartości" np.: kwiatek przenosił tą "wartość" do określonego przez użytkownika pola w gridview?

0

Czy jest możliwe zaprogramowanie tak kodu, że po wybraniu z listboxa jakieś "wartości" np.: kwiatek przenosił tą "wartość" do określonego przez użytkownika pola w gridview?

Tak

0

^A mógłbym poprosić o przykład takiego kodu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1