View Full Version : سوال: دسترسی به متدهای یک کنترل در یک فرم دیگر
roze_abi-r
دوشنبه 01 آبان 1391, 17:07 عصر
سالم و عرض خسته نباشید خدمت اساتید و دوستان گرامی
من برنامه نویسی WPF رو تازه شروع کردم.(vb و #c)
توی پروژه ای که تازه ایجاد کردم به یه مشکل برخورد کردم، در WindowsApplication ها برای دسترسی به متدهای یک کنترل به صورت زیر عمل میشه
نام فرم.نام کنترل.نام متد
ولی در WPF به شکلی در بالا نوشتم امکان دسترسی به کنترلها و متد کنترلها وجود نداره.
حالا برای دسترسی به متد کنترلهای یک فرم از داخل یک فرم دیگه به چه صورت باید عمل کنم؟
ممنون میشم اگه راهنماییم بکنید
mmd2009
دوشنبه 01 آبان 1391, 18:21 عصر
با سلام.
Modifier کنترل ها در wpf به صورت پیش فرض Internal هست و این یعنی در اسمبلی جاری شما میتونید در هر جایی از کنترل ویندوز مورد نظرتون استفاده کنید بعنوان مثال من اگر بخوام به یک کنترل textbox درون window1 دسترسی داشته باشم درون window2 باید به این صورت عمل کنم :
var window1 = Application.Current.Windows
.Cast<Window>()
.FirstOrDefault(window => window is Window1) as Window1;
if (window1 != null) Content = window1.textBox1.Text;
وقتی در کد بالا از عبارت Application.Current استفاده میکنید یعنی شما میتونید به کلیه window های app جاری دسترسی داشته باشید .
ولی خب اگر Modifierکنترلتون رو تغییر دادید و فرضا اون رو Private کردید شما اینبار باید از یگ پراپرتی ساده استفاده بکنید و اون رو به window مورد نظرتون پاس بدید مثلا بدین شکل :
کدهای window1 :
var window2 = new Window2 {MyTextBox = textBox1};
window2.Show();
کدهای window2 :
public TextBox MyTextBox { get; set; }
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Content = MyTextBox.Text;
}
شما هر کنترلی رو میتونید بدین شکل به window های دیگه ارسال کنید
موفق باشید
roze_abi-r
دوشنبه 01 آبان 1391, 21:09 عصر
با سلام مجدد.
و ممنون از اینکه وقت گذاشتید و سوالم رو پاسخ دادید.
من به همون روشی که فرمودید مشکل رو برطرف کردم. اگر ممکن است در مورد این قسمت توضیح بیشتری بفرمائید
var window1 = Application.Current.Windows
.Cast<Window>()
.FirstOrDefault(window => window is Window1) as Window1;
if (window1 != null) Content = window1.textBox1.Text;
وقتی در کد بالا از عبارت Application.Current استفاده میکنید یعنی شما میتونید به کلیه window های app جاری دسترسی داشته باشید .
mmd2009
سه شنبه 02 آبان 1391, 02:01 صبح
با سلام
دستور Application.Current.Windows همونطور که گفتم مارو به windows های app جاری میرسونه ( active window منظورمه ) . خب حالا نوع هم همونطور که مشخصه WindowCollection هست ولی ما که به Collection از window های نیازی نداریم و فقط به پنجره ای نیاز داریم که داده ی مورد نظر ما داخلش هست خب ما اومدیم نوع اون رو Cast کردم به Window که مارو فقط به یک window برسونه ! خب حالا از یک extension method با نام FirstOrDefault استفاده کردیم که مارو به اولین نتیجه ی مورد نظر برسونه و بعد از نتیجه ی اولی یا پیش فرض بقیش رو دیگه در نظر نگیره ! خب تو این extension method گفتیم اگر اون window که پیدا کردی مثل Window1 بود بیا تبدیلش کن به Window1
بقیه کد هم که مشخصه
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.