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
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
Przytoczona metoda używa wywołania funkcji z czterema argumentami:
- argument pierwszy: string text- tym argumentem podajemy treść komunikatu
- argument drugi: string caption- tym argumentem podajemy treść paska tytułowego w oknie dialogowym
- argument trzeci: MessageBoxButtons buttons- tym argumentem definiujemy układ grupy klawiszy widocznych w oknie dialogowym
- argument czwarty: MessageBoxIcon icon- tym argumentem definiujemy użycie dostępnej standardowej ikony w systemie Widows
Dostępne wywołania układu klawiszy w standardowych oknach dialogowych
Przykład jak podać argument użycia układu klawiszy w oknie dialogowym
MessageBoxButtons.OKWidok na dostępne systemowe ikony dla standardowych okien dialogowych w systemie Windows
Przykład jak podać argument użycia ikony w oknie dialogowym
MessageBoxIcon.InformationCel: 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
- Label- sztuk 1
- TextBox- sztuk 1
- Button- sztuk 4
- StatusStrip- sztuk 1
W komponent StatusStrip osadzimy dwa wewnętrzne typy tego komponentu. Będą to komponenty ToolStripStatusLabel. Poniższy rysunek ilustruje jak to zrobić
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)
Po skompilowaniu projektu w dolnej części formatki będzie widoczny 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
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
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
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).
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.
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;
}
}
}