Вопрос по С++

Cris

Member
все проблемы что были, покачто уже решились, но не появились новые:

когда создаеться форма - создаеться клас типа Form1, когда изменяеш содержимое например Textbox->Text в функциях которые напрямую принадлежат Form1, то они содержимое меняют, если же
я создаю экземпляр класа - Form1 frm
то когда я пытаюсь зделать так frm.textbox1->text="asldfghljsd";
оно его просто игнорирует и нечего неменяет, что делать?
 

dreamer

Member
все проблемы что были, покачто уже решились, но не появились новые:

когда создаеться форма - создаеться клас типа Form1, когда изменяеш содержимое например Textbox->Text в функциях которые напрямую принадлежат Form1, то они содержимое меняют, если же
я создаю экземпляр класа - Form1 frm
то когда я пытаюсь зделать так frm.textbox1->text="asldfghljsd";
оно его просто игнорирует и нечего неменяет, что делать?
Каждый экземпляр это отдельная форма, создавая экземпляр ты создаеш скрытую форму и меняешь ее параметры а не основной видимой.
(frm->Show())
 

Cris

Member
Каждый экземпляр это отдельная форма, создавая экземпляр ты создаеш скрытую форму и меняешь ее параметры а не основной видимой.
(frm->Show())
не проходит чета(
у меня в майне есть такое:
Application::Run(gcnew Form1());
и когда я делаю frm.show() то у меня открываеться новое окно и виснит вся прога, как бороться?

кста может это поможет:
получаеться так что на форму я нажимаю кнопку коннект - идет коннект к серву через сокеты, потом я запуская поток на прием данных, так вот мне нужно чтобы этот поток записывал все принятые данные в textbox или label, ну а оно пишет незя, в таких случаях я в инете находил чтото про BackgroudWorker и delegate чтото вроде этого, кто про них может разказать простыми словами
 
Останнє редагування:

dreamer

Member
не проходит чета(
у меня в майне есть такое:
Application::Run(gcnew Form1());
и когда я делаю frm.show() то у меня открываеться новое окно и виснит вся прога, как бороться?
Куски кода в студию
кста может это поможет:
получаеться так что на форму я нажимаю кнопку коннект - идет коннект к серву через сокеты, потом я запуская поток на прием данных, так вот мне нужно чтобы этот поток записывал все принятые данные в textbox или label, ну а оно пишет незя, в таких случаях я в инете находил чтото про BackgroudWorker и delegate чтото вроде этого, кто про них может разказать простыми словами
Гм, я потоками плотно не занимался, но попробуй покопать в сторону Synchronize
 

Cris

Member
Form1.h:
Код:
namespace aaaa {
	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public: Form1(void)	{InitializeComponent();	}
		public:
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	public: System::Windows::Forms::Button^  connect;
	public: System::Windows::Forms::Label^  label1;

	public: System::Windows::Forms::Label^  online;
	public: System::Windows::Forms::TextBox^  ipadres;
	public: System::Windows::Forms::TextBox^  sendtext;
	public: System::Windows::Forms::Button^  send;
	public: System::Windows::Forms::Button^  dissconect;
	public: System::Windows::Forms::TextBox^  mess;
	public: 

	public: 


	public: 


	public: 
	public: System::ComponentModel::Container ^components;
void InitializeComponent(void)
		{
			this->connect = (gcnew System::Windows::Forms::Button());
			this->label1 = (gcnew System::Windows::Forms::Label());
			this->online = (gcnew System::Windows::Forms::Label());
			this->ipadres = (gcnew System::Windows::Forms::TextBox());
			this->sendtext = (gcnew System::Windows::Forms::TextBox());
			this->send = (gcnew System::Windows::Forms::Button());
			this->dissconect = (gcnew System::Windows::Forms::Button());
			this->mess = (gcnew System::Windows::Forms::TextBox());
			this->SuspendLayout();
			// 
			// connect
			// 
			this->connect->Location = System::Drawing::Point(386, 27);
			this->connect->Name = L"connect";
			this->connect->Size = System::Drawing::Size(167, 21);
			this->connect->TabIndex = 0;
			this->connect->Text = L"Connect";
			this->connect->UseVisualStyleBackColor = true;
			this->connect->Click += gcnew System::EventHandler(this, &Form1::connect_Click);
			// 
			// label1
			// 
			this->label1->Location = System::Drawing::Point(116, 28);
			this->label1->Name = L"label1";
			this->label1->Size = System::Drawing::Size(92, 20);
			this->label1->TabIndex = 1;
			this->label1->Text = L"IP:port сервера:";
			// 
			// online
			// 
			this->online->Location = System::Drawing::Point(563, 76);
			this->online->Name = L"online";
			this->online->Size = System::Drawing::Size(168, 397);
			this->online->TabIndex = 4;
			this->online->Text = L"Онлайн:";
			// 
			// ipadres
			// 
			this->ipadres->Location = System::Drawing::Point(230, 28);
			this->ipadres->MaxLength = 15;
			this->ipadres->Name = L"ipadres";
			this->ipadres->ShortcutsEnabled = false;
			this->ipadres->Size = System::Drawing::Size(115, 20);
			this->ipadres->TabIndex = 5;
			this->ipadres->Text = L"10.0.3.89";
			// 
			// sendtext
			// 
			this->sendtext->Location = System::Drawing::Point(35, 499);
			this->sendtext->MaxLength = 2048;
			this->sendtext->Name = L"sendtext";
			this->sendtext->Size = System::Drawing::Size(479, 20);
			this->sendtext->TabIndex = 7;
			// 
			// send
			// 
			this->send->Enabled = false;
			this->send->Location = System::Drawing::Point(523, 499);
			this->send->Name = L"send";
			this->send->Size = System::Drawing::Size(208, 20);
			this->send->TabIndex = 8;
			this->send->Text = L"Send";
			this->send->UseVisualStyleBackColor = true;
			this->send->Click += gcnew System::EventHandler(this, &Form1::send_Click);
			// 
			// dissconect
			// 
			this->dissconect->Enabled = false;
			this->dissconect->Location = System::Drawing::Point(563, 27);
			this->dissconect->Name = L"dissconect";
			this->dissconect->Size = System::Drawing::Size(167, 20);
			this->dissconect->TabIndex = 9;
			this->dissconect->Text = L"Disconnect";
			this->dissconect->Click += gcnew System::EventHandler(this, &Form1::dissconect_Click);
			// 
			// mess
			// 
			this->mess->Enabled = false;
			this->mess->Location = System::Drawing::Point(35, 84);
			this->mess->Multiline = true;
			this->mess->Name = L"mess";
			this->mess->Size = System::Drawing::Size(479, 389);
			this->mess->TabIndex = 10;
			this->mess->Text = L"Сообщение:\n";
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(743, 539);
			this->Controls->Add(this->mess);
			this->Controls->Add(this->dissconect);
			this->Controls->Add(this->send);
			this->Controls->Add(this->sendtext);
			this->Controls->Add(this->ipadres);
			this->Controls->Add(this->online);
			this->Controls->Add(this->label1);
			this->Controls->Add(this->connect);
			this->Name = L"Form1";
			this->Text = L"Client";
			this->ResumeLayout(false);
			this->PerformLayout();

}
public: System::Void connect_Click(System::Object^  sender, System::EventArgs^  e);
public: System::Void send_Click(System::Object^  sender, System::EventArgs^  e);
public: System::Void dissconect_Click(System::Object^  sender, System::EventArgs^  e);
};
}
сама прога:
Код:
#include "Form1.h"
#include "iostream"
#include "string"
#include "process.h"
#include "winsock2.h"
#include "windows.h"
#include "chatstr.h"
#include "winuser.h"
const int maxlen=2048;
bool flag=false;
SOCKET serv;
const int port=1257;
bool servok=true;
char buff[1024]="\0";
sockaddr_in  soptions; 
HANDLE hread;
unsigned readID;
using namespace aaaa;
using namespace std;
void stringtochar(char text[],System::String^ str){for(int i=0;i<str->Length;i++) text[i]=str[i];}
void fsend(SOCKET sr,char *str,int len,int flag){send(sr,str,len,flag);}
void fconnect(SOCKET serv,sockaddr_in soptions){connect(serv,(sockaddr *)&soptions,sizeof(soptions));}// это 2 функции чтоб ошибок невыдавало при вызове их в функциях формы

unsigned __stdcall read( void* pArguments )
	{
               Form1::mess->Text="aljshdgfjhasdf"; //МНЕ НУЖНО ИМЕНЯТЬ ТЕКТ ЗДЕСЬ	
          /*char strread[maxlen];
		int start=0,end=0;
		while(strread[0]!='\7'){
		recv(serv,&strread[0],maxlen,0);
		if(strread[0]!='\7'){
		chatstr::write(strread,start,end);
		for(int i=start;i<=end;i++)
		{
		}
		//mess->Text+='\n';
		}
		}
		flag=true;
		closesocket(serv);
		Form1::dissconect->Enabled=false;
		Form1::connect->Enabled=true;
		Form1::send->Enabled=false;
		Form1::ipadres->Enabled=true;
		*/
		_endthreadex(0);
		return 0;
	}
inline System::Void Form1::dissconect_Click(System::Object^  sender, System::EventArgs^  e)
{
	Form1::dissconect->Enabled=false;
	Form1::connect->Enabled=true;
	Form1::send->Enabled=false;
	Form1::ipadres->Enabled=true;
	flag=true;
	fsend(serv,"\7",1,0); //оправляем серву что мы отключаемся))
	CloseHandle(hread); // внешнее закритие потока
	closesocket(serv);//закрываем сокет
}
inline System::Void Form1::connect_Click(System::Object^  sender, System::EventArgs^  e)
{
	char sendip[maxlen]="\0";
	stringtochar(sendip,Form1::ipadres->Text);
	soptions.sin_family=AF_INET;
         soptions.sin_port=htons(port);
	soptions.sin_addr.S_un.S_addr=inet_addr(sendip);
	serv=socket(AF_INET,SOCK_STREAM,0);
	fconnect(serv,soptions); //конект к серву
 	hread = (HANDLE)_beginthreadex( NULL, 0, &read, 0, 0, &readID);//запуск потока
	Form1::dissconect->Enabled=true;
	Form1::connect->Enabled=false;
	Form1::send->Enabled=true;
	Form1::ipadres->Enabled=false;
}
inline System::Void Form1::send_Click(System::Object^  sender, System::EventArgs^  e) {
	char strsend[maxlen]="\0";
	char temp[maxlen]="\0";
	stringtochar(temp,Form1::sendtext->Text);
	Form1::sendtext->Text="\0";
	chatstr::chat(temp,strsend);
	fsend(serv,&strsend[0],strlen(strsend),0); //отправка месаги
}
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
	WSAStartup(0x202,(WSADATA*)&buff[0]);
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false); 
	Application::Run(gcnew Form1);
	WSACleanup();	
	return 0;
}
 

quant

yeah
Відповідь: Вопрос по С++

это какаято борода а не С++
Код:
array<System::String ^> ^args
Код:
[STAThreadAttribute]
я понимаю первое может можно скомпилить с operator^ хотя я такого никогда не видел, но второе это что ::eek:perator[] (enum) ?
вообще такую штуку с сетями лучше тебе будет закодить на C#
 

Cris

Member
Re: Відповідь: Вопрос по С++

это какаято борода а не С++
Код:
array<System::String ^> ^args
Код:
[STAThreadAttribute]
я понимаю первое может можно скомпилить с operator^ хотя я такого никогда не видел, но второе это что ::eek:perator[] (enum) ?
вообще такую штуку с сетями лучше тебе будет закодить на C#
Это Visual Studio - Visual C++ 2008(9-й) я на C# нехо так как я єту всю тему зделал в консоле, и там все перкрасно работает, но захотел зделать єто в Windows Forms Application, но не получаеться
 

dreamer

Member
Re: Відповідь: Вопрос по С++

Это Visual Studio - Visual C++ 2008(9-й) я на C# нехо так как я єту всю тему зделал в консоле, и там все перкрасно работает, но захотел зделать єто в Windows Forms Application, но не получаеться
Это CLI С++ (.NET версия С++) и библиотеки соответствующие.
Так что я тут тебе не помогу )
 

Cris

Member
люид как при запуске программы, свернуть ее в трей, и пользоваться менюшкой иконки + открывать прогу из иконки и сворачивать опять в трей
 
Зверху