PDA

View Full Version : سوال: متغیر سراسری



Meysamkh
چهارشنبه 30 مرداد 1387, 13:20 عصر
سلام دوستان
می خوام یه متغیر تعریف کنم و توی فرمهای مختلف از اون استفاده کنم.می شه بگین چه طوری؟
توضیح بیشتر :
اون متغیر usernameی هست که از کاربر زمان هنگام ورود به برنامه می گیره که بر اساس اون وقتی توی فرمهای مختلف صدا زده شد بر اساس اون Username یه سری ایتم ها رو فیلتر می کنه.

Dariuosh
چهارشنبه 30 مرداد 1387, 14:06 عصر
راههاي زيادي هست يکيش اينه
Project ==> Properties ==> Setting
يا يه Public Shared Property تعريف کني يا ...

HadiVB
چهارشنبه 30 مرداد 1387, 14:38 عصر
راه دیگه اون هم می تواند تعریف یک متغیر public در یک class باشه
همچنین می توانید یک چنین کاری رو توی کد فرم اصلی تون بکنید

Meysamkh
چهارشنبه 30 مرداد 1387, 18:21 عصر
دوستان ممنون از توجهتون ولی لطف می کنید یه مثال بزنید.
مثلا وقتی توی setting تعریف می کنم مقدار رشته ای usernameام رو هم همونجا بهش بدم؟
چه طوری صداش بزنم و توی یه فرم دیگم ازش استفاده کنم ؟
خیلی عجله دارم
ممنون

pesare_ariyayi
چهارشنبه 30 مرداد 1387, 18:36 عصر
اگر برنامتون یه فرم پایه داره که همه ی کلاس ها اونجا نمونه برداری میشن:
شما تو یک پنجره username رو از کاربر می گیرید. فرمی که به این کار اختصاص پیدا کرده خودش یک کلاسه. کافیه فیلد username رو تو همین فرم به صورت public تعریف کنید. طبیعتاً وقتی میخواید فرمی رو که username رو از کاربر می گیره رو نمایش بدید اول یه نمونه ازش درست می کنید و چیزی که کاربر وارد می کنه تو این نمونه ذخیره میشه. کافیه شما این پنجره رو نمایش بدید (usernameForm.ShowDialogh()) و بعد از اینکه کاربر ok رو کلیک کرد اون فرم رو hide کنید و ازبین نبرید (dispose نکنید) به این ترتیب تا وقتی برنامتون باز هست او نمونه فرم از بین نرفته و می تونید از متغیرهای public اون از جمله username استفاده کنید. مثل این کد


string username=usernameForm.Username.toString();

Dariuosh
چهارشنبه 30 مرداد 1387, 22:09 عصر
دوستان ممنون از توجهتون ولی لطف می کنید یه مثال بزنید.
مثلا وقتی توی setting تعریف می کنم مقدار رشته ای usernameام رو هم همونجا بهش بدم؟
چه طوری صداش بزنم و توی یه فرم دیگم ازش استفاده کنم ؟
خیلی عجله دارم
ممنون



My.Settings.UserName = "Dariuosh"

ميتوني يه مقدار اوليه هم بهش بدي
در ضمن هر متغيري که تو Setting تعريف ميکني اگه از نوع User باشه قابل تغيير هست و از
My.Settings ميتوني بهش دسترسي داشته باشه ولي اگه Application تعريف کني فقط ReadOnly ميشه

Meysamkh
پنج شنبه 31 مرداد 1387, 12:31 عصر
اگر برنامتون یه فرم پایه داره که همه ی کلاس ها اونجا نمونه برداری میشن:
شما تو یک پنجره username رو از کاربر می گیرید. فرمی که به این کار اختصاص پیدا کرده خودش یک کلاسه. کافیه فیلد username رو تو همین فرم به صورت public تعریف کنید. طبیعتاً وقتی میخواید فرمی رو که username رو از کاربر می گیره رو نمایش بدید اول یه نمونه ازش درست می کنید و چیزی که کاربر وارد می کنه تو این نمونه ذخیره میشه. کافیه شما این پنجره رو نمایش بدید (usernameForm.ShowDialogh()) و بعد از اینکه کاربر ok رو کلیک کرد اون فرم رو hide کنید و ازبین نبرید (dispose نکنید) به این ترتیب تا وقتی برنامتون باز هست او نمونه فرم از بین نرفته و می تونید از متغیرهای public اون از جمله username استفاده کنید. مثل این کد


string username=usernameForm.Username.toString();



سلام دوست عزیز ;
ممنون از راهنمائیت , همه این کارائی رو که گفتی کردم ولی نشد .
میشه یه نگاه به کدم بندازی :
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim pass As String = PasswordTextBox.Text
Dim user As String = UsernameTextBox.Text

Dim u As New Meeting_Calendar__Plan_(user)

همون طوری که می بینی می خوام از user توی فرم Meeting_Calendar__Plan_ استفاده کنم .از خط آخری که میبینی error میگیره با این مضمون که : too many arguments to (public sub new (

تازه من فرم loginام رو dispose نکردم.

jafari1
پنج شنبه 31 مرداد 1387, 21:12 عصر
سلام
میتونید از module استفاده کنید


Module Name
Public u As String
end module

منصور بزرگمهر
جمعه 01 شهریور 1387, 17:33 عصر
یک چیز ساده است

حق با دوستمان jafari1 است.

یک Module دزست کن و متغیرهایت هم عمومی، این متغیرها همه جای برنامه دیده می شوند.

اَرژنگ
جمعه 01 شهریور 1387, 18:07 عصر
سوایه اینکه روشهایه اشتباه را ترویج میکنید ، چرا کسی دلیل استفاده از متغییر سراسری را نمیپرسه؟ اولین چیزی که در برنام‌نویسی یاد میدند استفاده نکردن از متغییرهایه سراسریست. یا اینکه در وی‌بی دات نت روشهایه درست برنامه نویسی اهمیت ندارد و همینطوری هر چیزی را سرهم آوردن کافی است؟

علیرضا مداح
جمعه 01 شهریور 1387, 18:36 عصر
سلام دوست عزیز،
استفاده از متغیرهای سراسری(Global Variables) عموما" توصیه نمیگردد و برای دستیابی به الگوریتم مطلوب میبایست سناریو را شرح دهید ،
در صورتیکه اطلاعات نگه داری شده Sensitive میباشند - همانند ConnectionString - ، ذخیره ی آن در String امن نیست و باید از SecureString استفاده نمایید ،
همچنین برای ذخیره ی یک پروپرتی در سطح Application-Domain میتوانید از توابع SetData و GetData مربوط به شیء AppDomain.CurrentDomain استفاده نمایید ، به مثالی از MSDN در این خصوص توجه نمایید :


Imports System
Imports System.Reflection
Class ADGetData
Public Shared Sub Main()
' appdomain setup information
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
'Create a new value pair for the appdomain
currentDomain.SetData("ADVALUE", "Example value")
'get the value specified in the setdata method
Console.WriteLine(("ADVALUE is: " & currentDomain.GetData("ADVALUE")))
'get a system value specified at appdomainsetup
Console.WriteLine("System value for loader optimization: {0}", _
currentDomain.GetData("LOADER_OPTIMIZATION"))
End Sub
End Class
' This code example produces the following output:
'
'ADVALUE is: Example value
'System value for loader optimization: NotSpecified


همچنین میتوانید این متغیر را در Settings نگهداری نمایید ، بدینمنظور میتوانید از اعضای My.Serttings استفاده نمایید ،

به هرحال با معلوم شدن هدف شما و سناریوی شما ، پاسحی مطلوب نصیبتان خواهد شد ،/