PDA

View Full Version : سوال: دسترسی به مقدار تکس باکس یک برنامه از یک برنامه دیگر



سجاد ش
شنبه 14 اسفند 1389, 12:33 عصر
با عرض سلام خدمت اساتید و دوستان


ی تکس باکس داریم توی برنامه اول از طریق برنامه دوم میخوام به خواصیت تکس ش دسترسی داشته باشم
(هم نوشتن و خواندن ) .

نمیدونم از کجا باید شروع کرد


یکسری مطالب در مورد handel بود که دیدم ولی به نتیجه مطلوب نرسیده بودند .

با تشکر .

ali_13h
شنبه 14 اسفند 1389, 15:43 عصر
از توابع get و set استفاده کنید
فرم 1:
form1 sa = new form1();
sa.Lbl = textBox1.Text;

فرم 2 :
public string Lbl
{
get
{
return textBox6.Text;
}
set
{
textBox6.Text = value;
}
}

shadi khanum
شنبه 14 اسفند 1389, 23:21 عصر
یعنی دو تا Application جدا؟! یا مثلا دو تا فرم تو یه برنامه!

محسن شامحمدی
یک شنبه 15 اسفند 1389, 08:11 صبح
هر دو برنامه رو خودتون می نویسید؟؟؟


روش درست و قدیمیش همون هستش ، از راه حلهایی که آقای کلاهدوزان گفتن WCF رو من پیشنهاد می کند چون API ساده تری نسبت به بقیه داره ولی باز میگم از همون
SendMessage استفاده کن. ولی به این نکته دقت کن که SendMessage برای یه Window پیغام می فرسته پس اگر یکی از برنامه ها کنسول هستش می تونی از PostMessage و PostThreadMessage استفاده کنی ، وقتی از PostMessage استفاده می کنی مسیج توی صف میسج های ویندوز قرار می گیره اون وقت با PeekMessage یا GetMessage مسیج رو بازیابی کنی و از مقادیرش استفاده کنی ، ولی خوب تو با مسیجها امکانات محدودی در اختیار داری اینکه بخوای یک داده رو بین جابجا کنی چطوری میشه رو نمی دونم ولی فکر کنم با اگر کلاسهای نیم اسپیس System.Runtime.InteropServices بتونن بهت کمک کنن.

در نهایت ساده ترین روش WCF ه و سوکت بد نیست ولی تو یه WCF می نویسی هاستش رو میذاری توی یه ویندوز سرویس بعد همیشه ازش استفاده می کنی.

Simple Interprocess Communications using WM_COPYDATA (http://www.vbaccelerator.com/home/net/code/libraries/windows_messages/Simple_Interprocess_Communication/article.asp)

سجاد ش
یک شنبه 15 اسفند 1389, 11:45 صبح
بله 2 تا برنامه رو خودم نوشتم
برای دسترسی به هند ل ی فرم از یکی از سایت ها ی کد پیدا کردم بافر و هندل دارم حالا میخوام ازش استفاده کنم نمیتونم

اضافه کردن using System.Runtime.InteropServices;

دی ال های مورد نیاز
[ DllImport("user32.dll") ]

static extern int GetForegroundWindow();

[ DllImport("user32.dll") ]

static extern int GetWindowText(int hWnd, StringBuilder text, int count);



متدی برای باز گرداندن بافر و هندل
private void GetActiveWindow()
{

const int nChars = 256;
int handle = 0;
StringBuilder Buff = new StringBuilder(nChars);

handle = GetForegroundWindow();

if (GetWindowText(handle, Buff, nChars) > 0)
{
this.captionWindowLabel.Text = Buff.ToString();
this.IDWindowLabel.Text = handle.ToString();
}

}


ی تایمر که اخرین صفحه رو هندل شو بنویسه (متد رو فراخوانی کن).

سجاد ش
دوشنبه 16 اسفند 1389, 10:12 صبح
اولا تشکر میکنم از دوستانی که کمک کردن

یکی از دوستان ی پیشنهاد خوب دادن توی ی تاپیک دیگه که من هم مشکل رو با اون حل کردم برنامه رو تحویل دادم (در حد فعلا خلاص شدن ).
چون دو تا برنامه خودم نوشتم به سورس هر دو دسترسی داشتم مشکل رو با ی فایل مشترک حل کردم .

روی سرعت برنامه تاثیر گذاشت ولی راه حل بهتری نتونستم پیدا کنم .

این می نویسم برای دوستان دیگه که بعدها به مشکل برخوردن استفاده کنن (در حد فعلا خلاص شدن ).

اون تکس باکس تبدیل کردم به ی ریچ باکس هر وقت تغییری توی ریچ باکس رخ داد مقدار شو ذخیره می کنه توی ی فایل مشترک بعد برنامه دوم فایل مشترک رو باز میکنه
مقدارش تست میکنه و......... .