aFizyka logo

Przesyłanie komunikatu zwrotnego

Przesyłanie komunikatów w środowisku Windows (i nie tylko) może być realizowane na wiele sposobów., na przykład do dolnego paska stanu okna lub okna dialogowego. Pierwsza metoda jest bardzo łatwa, druga nieznacznie trudniejsza i wymaga krótkiego wstępu.

Przykładowe okno dialogowe z komunikatem wysłanym z aplikacji

okno dialogowe z komunikatem wysłanym z aplikacji Visual studio C#

Wywołanie okna dialogowego wymaga użycia standardowej funkcji Show należącej do klasy MessageBox. Funkcja ta ma kilkanaście możliwości wywołania. Jedną z możliwości pokazuje poniższa ilustracja

okno dialogowe Show do klasy MessageBox Visual studio C#

Przytoczona metoda używa wywołania funkcji z czterema argumentami:

Dostępne wywołania układu klawiszy w standardowych oknach dialogowych

układu klawiszy w standardowych oknach dialogowych Visual studio C#

Przykład jak podać argument użycia układu klawiszy w oknie dialogowym

MessageBoxButtons.OK

Widok na dostępne systemowe ikony dla standardowych okien dialogowych w systemie Windows

systemowe ikony dla standardowych okien dialogowych Visual studio C#

Przykład jak podać argument użycia ikony w oknie dialogowym

MessageBoxIcon.Information

Cel: Napisz aplikację, która zwróci komunikat o pozycji górnego lewego rogu formatki oraz prześle tekst wprowadzony z klawiatury do paska stanu lub okna dialogowego

Krok 1: Układ komponentów

W projekcie użyjemy poniższych komponentów

przesyłanie komunikatów w visual studio

W komponent StatusStrip osadzimy dwa wewnętrzne typy tego komponentu. Będą to komponenty ToolStripStatusLabel. Poniższy rysunek ilustruje jak to zrobić

komponenty ToolStripStatusLabel

Komponenty ToolStripStatusLabel oddzielmy od siebie prostym zabiegiem poprzez dodanie na przykład z prawej strony komponentu ToolStripStatusLabel1 obramowania. Wykonamy to przez zmianę parametrów właściwości BorderSides (patrz ilustracja)

BorderSides właściwości

Po skompilowaniu projektu w dolnej części formatki będzie widoczny pionowy separator oddzielający komponenty ToolStripStatusLabel

pionowy separator oddzielający komponenty ToolStripStatusLabel

Krok 3. Odczyt współrzędnych ekranowych aplikacji

Informację o bieżących współrzędnych ekranowych głównego okna aplikacji wyślemy do komponentu ToolStripStatusLabel1. Komunikat zmiany współrzędnych ekranowych aplikacji uzyskamy w zdarzeniu LocationChanged formatki. Odszukamy to zdarzenie w oknie Właściwości i je zainicjujemy przez szybkie dwukrotne kliknięcie lewym klawiszem myszki

funkcja LocationChanged

Parametr Left i Top formatki Form1 przechowuje informację o współrzędnych okna aplikacji. Wystarczy, że odczytamy je i wyślemy na ekran, konkretnie w dolny lewy narożnik naszego projektu. Z racji tego, że dane te są typu Int musimy wykonać konwersję typu całkowitego (Int) na typ łańcuchowy (String). Pokazuje to poniższa instrukcja

Wskazówka:


private void Form1_LocationChanged(object sender, EventArgs e)
{
	toolStripStatusLabel1.Text = "x: "+this.Left.ToString()+"; y: "+this.Top.ToString();
}

Kompilujemy i uruchamiamy program. Jeżeli mamy wszytko prawidłowo wykonane, to podczas przesuwania aplikacji po ekranie monitora będziemy widzieć w dolnym lewym rogu bieżącą pozycję górnego lewego rogu formatki

współrzędne okna aplikacji visual studio

Krok 4. Wysłanie tekstu z komponentu TextBox do komponentu ToolStripStatusLabel

Czynność wysłania tekstu z komponentu TextBox do komponentu ToolStripStatusLabel wykonamy przy użyciu zdarzenia Click komponentu Button.

Komponent TextBox umożliwia przechwytywanie znaków z klawiatury, co oznacza, że możemy w nim pisać jeżeli jest w stanie edycji. Efekt wykonania tego kroku pokazuje poniższa ilustracja

wysłania tekstu z komponentu TextBox do komponentu ToolStripStatusLabel

Aby było to możliwe funkcja Click komponentu Button powinna zawierać poniższą instrukcję przypisania tekstu

Wskazówka:


private void Button1_Click(object sender, EventArgs e)
{
	toolStripStatusLabel2.Text = textBox1.Text;
}

Krok 5. Wysłanie tekstu do okna dialogowego

Standardowe okno dialogowe systemu Window's uzyskamy wywołując czteroparametrową funkcję Show klasy MessageBox. Pierwszy parametr jest odpowiedzialny za treść komunikatu, drugi jest tytułem okna dialogowego, trzeci parametr związany jest z klawiszami okna dialogowego (na przykład MessageBoxButtons.OK), a czwarty z widoczną ikoną dialogu systemu Window's (na przykład MessageBoxIcon.Information).

okno dialogowe systemu Window

Zdarzenie Click naszego przycisku powinno zawierać poniższą instrukcję

Wskazówka:


private void Button2_Click(object sender, EventArgs e)
{
	MessageBox.Show(textBox1.Text + System.Environment.NewLine 
					+ "x: " + this.Left.ToString() + "; y: " 
					+ this.Top.ToString(), "Komunikat", 
					MessageBoxButtons.OK, 
					MessageBoxIcon.Information);
}

Wykorzystując znacznik \n lub polecenie System.Environment.NewLine w łańcuchu znaków możemy dzielić łańcuch na nowe linie tekstowe (nowe wiersze)

Na zakończenie aplikację możemy usprawnic w funkcje czyszczącą treść kontrolki TextBox służącej do wprowadzania komunikatu, który bedzie przesyłany do innych kontrolek. Możemy to zrobic poprzez zdarzenie Click kolejnej kontrolki typu Button

Wskazówka:


private void button4_Click(object sender, EventArgs e)
{
	textBox1.Text = null;
}

Ćwiczenie sprawdzające

Wykorzystując okno dialogowe systemu Window's wyświetl komunikat zawierający bieżące współrzędne głównego okna utworzonej aplikacji.

okno dialogowe systemu Window's wyświetl komunikat

Pełny kod zbudowanej aplikacji

Form1.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace informacjaZwrotna
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_LocationChanged(object sender, EventArgs e)
        {
            toolStripStatusLabel1.Text = "x: "+this.Left.ToString()+"; y: "+this.Top.ToString();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            toolStripStatusLabel2.Text = textBox1.Text;
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show(textBox1.Text + System.Environment.NewLine 
                            + "x: " + this.Left.ToString() + "; y: " 
                            + this.Top.ToString(), "Komunikat", 
                            MessageBoxButtons.OK, 
                            MessageBoxIcon.Information);
        }
		
        private void button4_Click(object sender, EventArgs e)
        {
            textBox1.Text = null;
        }		
    }
}