Jak przesłać text z funkcji poza klasą w której jest pole tekstowe do niego

0

Wpisuje w metodzie obiektu (button):

textBox1->AppendText("test");

i wypisuje mi tekst test.

Mam funkcje poza tą klasą z której chciałbym przekazać jakąś zmienną tekstową bezpośrednio do textBox1 i wyświetlić jakiś tekst, nie wiem jak to zrobić.

Wstawienie w podanej funkcji tego nie działa:

MySqlProject::MyForm form2;
		form2.textBox1->AppendText("123456");

Funkcja ta nie znajduje się w żadnej klasie itp...

0

Więc musisz do niej przekazać poprzez parametr referencje/wskaźnik do właściwego obiektu MyForm

0

Nie wiem jak to zrobić poniższy kod nie działa:

 MySqlProject::MyForm ^ p_MySqlProject = gcnew MySqlProject::MyForm;
		p_MySqlProject->textBox1->AppendText("test");

edytor widzi obiekty ale kompilator wywala błędy:

c:\users\alien1983\documents\visual studio 2013\projects\mysql project\mysql project\sqlpo.h(86): error C2653: 'MySqlProject' : is not a class or namespace name
c:\users\alien1983\documents\visual studio 2013\projects\mysql project\mysql project\sqlpo.h(86): error C2065: 'MyForm' : undeclared identifier
c:\users\alien1983\documents\visual studio 2013\projects\mysql project\mysql project\sqlpo.h(86): error C2065: 'p_MySqlProject' : undeclared identifier
c:\users\alien1983\documents\visual studio 2013\projects\mysql project\mysql project\sqlpo.h(86): error C2061: syntax error : identifier 'MyForm'
c:\users\alien1983\documents\visual studio 2013\projects\mysql project\mysql project\sqlpo.h(87): error C2065: 'p_MySqlProject' : undeclared identifier
c:\users\alien1983\documents\visual studio 2013\projects\mysql project\mysql project\sqlpo.h(87): error C2227: left of '->textBox1' must point to class/struct/union/generic type

Gdzieś wyczytałem aby zrobić uchwyt do obiektu.

Funkcje visualne znajdują się w pliku: MyForm.h

Natomiast funkcja w której chcę zrobić uchwyt w pliku sqlpo.h

plik MyForm.h:

#pragma once
#include "sqlpo.h"

namespace MySqlProject {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for MyForm
	/// </summary>
	public ref class MyForm : public System::Windows::Forms::Form
	{
	public:
		MyForm(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~MyForm()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Button^  SQLbtn;
	public: System::Windows::Forms::TextBox^  textBox1;
	private: System::Windows::Forms::Button^  button2;
	protected:

	protected:

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->SQLbtn = (gcnew System::Windows::Forms::Button());
			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
			this->button2 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// SQLbtn
			// 
			this->SQLbtn->Location = System::Drawing::Point(197, 12);
			this->SQLbtn->Name = L"SQLbtn";
			this->SQLbtn->Size = System::Drawing::Size(75, 23);
			this->SQLbtn->TabIndex = 0;
			this->SQLbtn->Text = L"button1";
			this->SQLbtn->UseVisualStyleBackColor = true;
			this->SQLbtn->Click += gcnew System::EventHandler(this, &MyForm::SQLbtn_Click);
			// 
			// textBox1
			// 
			this->textBox1->Location = System::Drawing::Point(-1, 119);
			this->textBox1->Multiline = true;
			this->textBox1->Name = L"textBox1";
			this->textBox1->Size = System::Drawing::Size(286, 147);
			this->textBox1->TabIndex = 1;
			// 
			// button2
			// 
			this->button2->Location = System::Drawing::Point(197, 90);
			this->button2->Name = L"button2";
			this->button2->Size = System::Drawing::Size(75, 23);
			this->button2->TabIndex = 2;
			this->button2->Text = L"button2";
			this->button2->UseVisualStyleBackColor = true;
			this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);
			// 
			// MyForm
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(284, 261);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->textBox1);
			this->Controls->Add(this->SQLbtn);
			this->Name = L"MyForm";
			this->Text = L"MyForm";
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: System::Void SQLbtn_Click(System::Object^  sender, System::EventArgs^  e) {
		textBox1->AppendText("Hello Word! \n");
		//setlocale(LC_ALL, "Polish_Poland.OCP");
		//string q1 = maino();
		//textBox1->AppendText(gcnew String(q1.c_str()));
		//char ^q1 = maino();
		string w = sqlQuery();
		//textBox1->AppendText(gcnew String(w));
		textBox1->AppendText(gcnew String(w.c_str()));

	}
	private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
		ST element_0;
		ST element_1;
		ST element_2;
		element_0.nik = "alien0";
		element_0.haslo = "0";
		element_1.nik = "alien1";
		element_1.haslo = "1";
		element_2.nik = "alien2";
		element_2.haslo = "2";

		element_0.push_back(&element_1);
		element_1.push_back(&element_2);
		ST * node = &element_0;
		while (node = node->next) {
			textBox1->AppendText(gcnew String(node->haslo.c_str()));
		}
		while (node = node->prev) {
			textBox1->AppendText(gcnew String(node->haslo.c_str()));
		}
		//textBox1->AppendText(gcnew String(POS1[0].nik.c_str()));
		
		
		
	}
	};
}
0
void FunkcjaSqlPo(MySqlProject::MyForm ^p_MySqlProject)
{
    p_MySqlProject->textBox1->AppendText("test");
}
1

Nie powinieneś tak bezpośrednio grzebać po kontrolkach innej formy. Stwórz publiczną metodę w formie 2 i ją wywołuj.

0

Dzięki z podpowiedzi;)

 void FunkcjaSqlPo(MySqlProject::MyForm ^p_MySqlProject)
		{
			p_MySqlProject->textBox1->AppendText("test");
			p_MySqlProject->button2->Click;
		}

Dlaczego ta linia nie działa?

p_MySqlProject->button2->Click;
 
1

Ponieważ Click jest metodą.

0

Teraz mam inny problemik, mam 3 pliki : sqlpo.h i MyForm.h + Source.cpp

funkcje i metody w plikach : sqlpo.h i MyForm.h odwołują się wzajemnie do siebie i problem jest w tym że odwołują się jeszcze do niezdeklarowanych zasobów.

Ogólnie zdeklarowanie nagłówków powinno pomóc w tej sytuacji (chyba). ??

MyForm.h - funkcje wizualne (obsługa okienek, c++/cli)
sqlpo.h - funkcje natywne (c++, obsługa bazy)

Problem , że "tymczasowo" potrzebny mi jest na bieżąco podgląd danych w różnych miejscach funkcji w tym pliku"sqlpo.h", aby się zorientować co gdzie jest (np.wartości zmiennych);

Ale na razie nie mogę podpiąć metod to wykonujących z powodów podanych powyżej...

W Delphi wrzucałem w takiej sytuacji ShowMessage; W celu sprawdzenia zmiennych w danym momencie.

Chyba, że visual studio ma jakąś opcje podglądu zmiennych na bieżąco itp.

#pragma once
include "sqlpo.h"

includuje funkcje

void FunkcjaSqlPo(MySqlProject::MyForm  ^p_MySqlProject, System::Object^  sender, System::EventArgs^  e)
{
   p_MySqlProject->textBox1->AppendText("test");
    p_MySqlProject->SQLbtn_Click(sender, e);
/* W tym miejscu jeszcze visualne kontrolki nie są załadowane */
}

Ewentualnie może da się ładować do jakiegoś bufora wartości z natywnego c++ a potem odczytywać przez kontrolki c++/cli?

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