WinFormApp i wykresy.

WinFormApp i wykresy.
M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Witam.

Mam pewien problem otóż potrzebuje zrobić program, który będzie mi generować wykres na układzie współrzędnych. Dane do wykresu mają być pobieranie z tablicy. Wszystko mam już w sumie zrobione w języku c# tylko mam problem z tymi wykresami, ponieważ nie wiem jak je wygenerować, za pomocą którego narzędzia i w jaki sposób. Próbowałem już rysować go za pomocą Graphics, ew po prostu wstawić sam wykres ale i tak mam problem z dodaniem do niego punktów. Wiem że zapewne problem jest błachy ale zależy mi na rozwiązaniu go. Dziękuję za wszystkie odpowiedzi.

JP
Poszukaj gotowych komponentow. Jest troche darmowych i komercyjnych. Ja używam Devexpress-a ale nie są tanie. Syncfusion ma opcje za free ale mi jakoś nie pasują. Jakies takie brzydkie.
M2
Mi nie zależy żeby to ładnie wyglądało, bo to jest zwykła apka na zaliczenie, ale niestety wykresy są w moim przypadku wymagane, i stad to pytanie czy za pomocą narzędzi w WinFormsach jestem w stanie coś zdziałać? A jeśli tak to jakich ?
JP
Tuasz info o darmowej licencji https://www.syncfusion.com/products/communitylicense W tych komponentach jest (prawie) wszystko. Przy instalacji mozna wybrac co chcesz zainstalowac bo cslosc to chyba kilka GB. Są tez wykresy przeróżne. https://www.syncfusion.com/products/windows-forms/chart/types
gg
  • Rejestracja:około 9 lat
  • Ostatnio:12 miesięcy
  • Lokalizacja:Kraków
  • Postów:574
0

O ile pamiętam to do tego typu zabaw można użyć MSChart.
W sieci poszukaj jak użyć -> np. https://msdn.microsoft.com/en-us/library/aa231230(v=vs.60).aspx

M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Owszem, próbowałem tego ale problemem jest zmiana wykresu, ja nie chce diagramu ani słupkowego, potrzebuje konkretnie żeby to był układ współrzędnych z OX i OY. I stąd właśnie to pytanie. Nie wiem czy jest możliwe zrobienie takiego wykresu za pomocą Chart'a.

E9
  • Rejestracja:ponad 13 lat
  • Ostatnio:11 miesięcy
  • Postów:395
0

Bez problemu możesz na kontrolce Panel narysować taki wykres klasą Graphics.

Rysowanie po Windows Forms

M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Okej na Panelu za pomocą Graphics, tylko teraz muszę pobrać dane z tablicy np x = 2,999 a y=1,34 załóżmy. I chce to zrzutową na Panel. I potrzebuje żeby to był punkt. Jakieś pomysły żeby to uzyskać ? Bo typowo samego punktu jako Point w graphicsie nie ma.

E9
  • Rejestracja:ponad 13 lat
  • Ostatnio:11 miesięcy
  • Postów:395
0
edytowany 1x, ostatnio: error91
M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Czyli da rade zrobić tak żeby bezpośrednio z tablicy wpisać w x i Y ?

E9
  • Rejestracja:ponad 13 lat
  • Ostatnio:11 miesięcy
  • Postów:395
0

Musisz te punkty przeskalować względem wielkości Twojej kontrolki. Spróbuj coś narysować, wklej kod jeśli nie będziesz mógł rozwiązać jakiegoś problemu, a forum postara się pomóc ;)

M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Ja zrobiłem to wstępnie o wielkości 400x400. Jak będzie jakiś problem to na pewno sie odezwę :D ale powinno juz być okej, wiem juz czego użyć, tylko w tym w sumie miałem problem

JP
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:1065
1

Ja bym się jednak zastanowił z ręcznym rysowaniem wszystkiego. Jak to ma być wykres to przydały by się osie, skale, jakieś oznaczenia itp. Ładnych parę godzin klepania niepotrzebnego kodu skoro są gotowe rozwiązania. Chyba, że chcesz się nauczyć 3-4 metod z GDI+ chociaż nie wiem po co.

Z Chartem MSowym też się da zrobić wykres XY (bardzo bym się zdziwił, gdyby się nie dało). Trzeba ustawić typ serii na Line (albo coś podobnego).

Kopiuj
chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
double[,] data = new double[5, 2] { {0,0 }, {1,1 }, {2,2 }, {3,3 }, {4,5 } };

for (int i = 0; i < data.Length / 2; i++)
{
    chart1.Series[0].Points.AddXY(data[i, 0], data[i, 1]);
}
edytowany 3x, ostatnio: jacek.placek
gg
  • Rejestracja:około 9 lat
  • Ostatnio:12 miesięcy
  • Lokalizacja:Kraków
  • Postów:574
0

Użycie MSChart, o coś takiego CI chodzi?
screenshot-20170924234535.png

M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Więc tak teraz mam taki problem. Otóż funkcja która mi wylicza parametry które mają się później wyświetlić na wykresie jest wrzucona w Buttona. Poprzez naciśnięcie przycisku parametry są wyliczane. I mam taki problem gdyż private void button1_Click(object sender, EventArgs e) to jest jako prywatne, a muszę wrzucić do tego przycisku również generowanie wykresu. Jakieś pomysły?

JP
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:1065
1

Ja mam pomysł taki, żebyś przeczytał jakąś książkę dla początkujących. Nie, żebym się zbijał czy coś, tylko znacznie bardziej efektywnie będzie jeśli przerobisz trochę przykładów książkowych z obsługi IDE, samego programowania, teorii obiektowości itp.
Zakładam, ze masz Form, skoro masz Button.
Wstawiasz na formę (jak to się powinno po polsku nazywać?) Chart z Toolbox-a.
Pod button1_click... masz swoje jakieś obliczenia.
Po obliczeniach masz pewnie jakąś tablicę dwuwymiarową lub 2 tablice dla X (iksy[]) i Y (igreki[]), i mają taką samą wielkość.

Wstawiasz to co napisałem wcześniej tylko ze swoimi tablicami

Kopiuj
// ustawienie typu serii na Line (w Properties można jej dodać jakieś znaczniki w punktach, kwadraciki czy coś innego)
chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;

chart1.Series[0].Points.Clear(); // wyczyszczenie starych punktów

for (int i = 0; i < iksy.Length; i++)
{
    chart1.Series[0].Points.AddXY(iksy[i], igreki[i]);
}

Czy może być tu coś niezrozumiałego?

Zobacz w oknie Properties co ma komponent Chart. W szczególności: Series, Legends, ChartAreas. Tam jest dużo różnych możliwości.

Jeśli twój wpis dotyczy rysowania przez GDI to trzeba (chyba) użyć zdarzenia OnPaint kontrolki do przerysowania wszystkiego co chcesz narysować.

M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Kod mniej więcej wygląda tak:

Kopiuj
private void przyciskGenerowania(object sender, EventArgs e)
{
tutaj mam swoje obliczenia i na samym dole mam tablice y[0,n] i y[1,n] 
}

I chcę żeby tutaj z tym przyciskiem generował się wykres,a rysować wykres mogę tylko w private void wykres1(object sender, PaintEventArgs e)

Jak połączyć te dwie funkcje ? Bo jak wklejam całą funkcje wykres1 to od razu cały kod mi się rozpieprza i nie działa.

JP
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:1065
1

Ale w koncu uzywasz Chart-a czy GDI?
Jak Charta to tak jak pisalem wyzej. Jak GDI to w zdarzeniu OnPaint (lub Paint, nie pamiętam) kontrolki an ktorej rysujesz.
Pokaż caly kod formy.
Co wywołuje metode wykres1()?

M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Używam GDI po prostu w funkcji przycisku gdzie nacisnę przycisk jest uruchamiany mój algorytm który wylicza mi wartości x i y które pózniej chce nanieść na układ wspolrzednych który już mam namalowany i wyskalowany. Problem jest taki ze nie mogę z funkcji przycisku przenieść wartości do funkcji malowania na panelu. Chciałbym żeby po wciśnięciu guzika algorytm generował wartości które bedą Od razu naniesione na wykres.

JP
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:1065
1

Mam nadzieję, że przyszły pracodawca wybije Ci takie pomysły z głowy.

Rysować musisz w zdarzeniu Paint kontrolki (komponentu) na której rysujesz (np Panel panel1).
Możesz wstawić tam jakąś flagę np. DrawFlag (trochę brzydkie rozwiązanie).
Przed wykonaniem obliczeń ustawiasz DrawFlag = false;

Po zakończeniu obliczeń ustawiasz flagę

Kopiuj
private void przyciskGenerowania(object sender, EventArgs e)
{
    //tutaj mam swoje obliczenia i na samym dole mam tablice y[0,n] i y[1,n] 
    DrawFlag = true; 
    panel1.Refresh(); // zakładam, ze rysujesz na panel1
}

W zdarzeniu Paint (jak rozumiem u Ciebie to zdarzenie to metoda wykres1(object sender, PaintEventArgs e)
tam robisz coś takiego

if(DrawFlag == false)
return

i potem rysowanie

Tablice z danymi muszą być oczywiście widziane w zdarzeniu Paint (zadeklarowane w klasie formularza).

Generalnie jak widzisz mnóstwo problemików bo nie chcesz (z jakiegoś niezrozumiałego powodu) normalnego Charta.

poza tym te tablice - y[0,n] i y[1,n] to jaki mają sens? Dlaczego używasz dwóch dwuwymiarowych tablic?

edytowany 3x, ostatnio: jacek.placek
M2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około rok
  • Postów:21
0

Mam jedną tablice która jest dwuwymiarowa, owszem i tablica jest y[0,n] oraz y[1,n] bo ogólnie ten algorytm jest potrzebny do obliczeń fizycznych. Jeśli pozwolisz, podeślę Ci projekt i zobaczysz o co konkretnie chodzi. W sumie stoję teraz w miejscu z powodu tego że nie mogę wykorzystać danych z jednej metody w drugiej. A obydwie metody są prywatne, a gettera w dziwny sposób nie mogę użyć.:/

JP
A ok. Nie zalapalem, że to jedna tablica. Form jest taką samą klasą jak cokolwiek. Jak zdefiniujesz tablice jako propoperty w klasie Form to bedziesz mial dostep do niej ze wszystkich metod tej klasy, takze z metod zdarzen. Zdefiniuj tablice w klasie poza metodą obliczeń.
M2
Tylko ze ja mam zdefiniowaną tablicę bezpośrednio w klasie Form1. Używam jej w algorytmie który się uruchamia po wciśnięciu przycisku. I jak np chcę użyć tablicy w panel1_Paint() to jak wpisuje y[1,0] tak dla przykładu to podkreśla mi i pisze wtedy : Only assignment, call, increment, decrement, and new object expressions can be used as a statement.
JP
Masz info na privie. Jak wpiszesz TYLKO y[0.1]; to dostaniesz taki komunikat jak piszesz. Trzeba albo przypisać wartość do tablicy: y[0,1] = coś albo odczytać var coś = y[0,0];
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)