PDA

View Full Version : سوال: تعریف namespace به طور عمومی



sari-1369
جمعه 20 شهریور 1388, 20:59 عصر
سلام دوستان .

آیا میشه یه name space رو طوری تعریف کرد که تو همه فرم ها قابل دسترسی باشه ؟

الان من از یه کامپوننت مسیج باکس فارسی تو برنامم استفاده می کنم .

توی هر فرم باید اول این کلاس رو import کنم

کد:

Imports PardisSoft.Components
بعد ، تو هر رویدادی که میخوام اینطوری استفاده کنم
کد:

FarsiMessageBox.Show("پیغام")
حالا اگه بشه میخوام کاری کنم که تو هر فرم مجبور نشم کلاسشو import کنم .

در ضمن برای اینکه نیاز به imports نباشه هم نمیخوام اینطوری استفاده کنم . http://www.forum.p30world.com/images/New-smile/N_aggressive%20%284%29.gif

کد:

PardisSoft.Components.FarsiMessageBox.Show("پیغام")
خلاصه میخوام راحت ترین راه باشه ، مثل فراخونی خود مسیج باکس .net

ali_md110
شنبه 21 شهریور 1388, 00:55 صبح
برای استفاده از کلاسها باید وهله سازی کنید
این کامپوننت بصورت dll باید باشه دوست من وشما ناچار هستید
کلاس زیر یک مسیج باکس فارسی هستش

Imports System
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports System.Text

Public Delegate Function CallBack_WinProc(ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Public Delegate Function CallBack_EnumWinProc(ByVal hWnd As Integer, ByVal lParam As Integer) As Integer


Public Class My_MessageBox
<DllImport("user32.dll")> _
Public Shared Function GetWindowLong(ByVal nIndex As Integer) As Integer
End Function
<DllImport("kernel32.dll")> _
Public Shared Function GetCurrentThreadId() As Integer
End Function
<DllImport("user32.dll")> _
Public Shared Function SetWindowsHookEx(ByVal idHook As Integer, ByVal lpfn As CallBack_WinProc, ByVal hmod As Integer, ByVal dwThreadId As Integer) As Integer
End Function
<DllImport("user32.dll")> _
Public Shared Function UnhookWindowsHookEx(ByVal hHook As Integer) As Integer
End Function
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function SetWindowText(ByVal hwnd As Integer, ByVal lpString As String) As Integer
End Function
<DllImport("user32.dll")> _
Public Shared Function EnumChildWindows(ByVal hWndParent As Integer, ByVal lpEnumFunc As CallBack_EnumWinProc, ByVal lParam As Integer) As Integer
End Function
<DllImport("user32.dll")> _
Public Shared Function GetClassName(ByVal hwnd As Integer, ByVal lpClassName As StringBuilder, ByVal nMaxCount As Integer) As Integer
End Function
Dim TopCount As Integer
Dim ButtonCount As Integer

Private Const GWL_HINSTANCE As Integer = (-6)
Private Const HCBT_ACTIVATE As Integer = 5
Private Const WH_CBT As Integer = 5

Private hHook As Integer

Dim strCaption1 As String
Dim strCaption2 As String
Dim strCaption3 As String

Public Function Showmessaage(ByVal Prompt As String, Optional ByVal Title As Object = "", Optional ByVal Button1 As String = "بله", Optional ByVal Button2 As String = "خیر", Optional ByVal Button3 As String = "انصراف", Optional ByVal buttons As MessageBoxButtons = MessageBoxButtons.OK, Optional ByVal icon As MessageBoxIcon = MessageBoxIcon.None, Optional ByVal DefaultButton As MessageBoxDefaultButton = MessageBoxDefaultButton.Button3, Optional ByVal options As MessageBoxOptions = MessageBoxOptions.RtlReading, Optional ByVal displayhelpbutton As Boolean = False) As DialogResult
Dim hInst As Integer
Dim Thread As Integer
TopCount = 0
ButtonCount = 0

strCaption1 = Button1
strCaption2 = Button2
strCaption3 = Button3

If Title = "" Then Title = Application.ProductName

Dim myWndProc As CallBack_WinProc = New CallBack_WinProc(AddressOf WinProc)

'hInst = GetWindowLong(GWL_HINSTANCE)
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, myWndProc, hInst, Thread)

Return MessageBox.Show(Prompt, Title, buttons, icon, DefaultButton, options, displayhelpbutton)
End Function

Private Function WinProc(ByVal uMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Dim myEnumProc As CallBack_EnumWinProc = New CallBack_EnumWinProc(AddressOf EnumWinProc)
If uMsg = HCBT_ACTIVATE Then
EnumChildWindows(wParam, myEnumProc, 0)
UnhookWindowsHookEx(hHook)
End If
Return 0
End Function

Private Function EnumWinProc(ByVal hWnd As Integer, ByVal lParam As Integer) As Integer
Dim strBuffer As StringBuilder = New StringBuilder(256)
TopCount += 1
GetClassName(hWnd, strBuffer, strBuffer.Capacity)
Dim ss As String = strBuffer.ToString()
If (ss.ToUpper().StartsWith("BUTTON")) Then
ButtonCount += 1
Select Case ButtonCount
Case 1
SetWindowText(hWnd, strCaption1)
Exit Select
Case 2
SetWindowText(hWnd, strCaption2)
Exit Select
Case 3
SetWindowText(hWnd, strCaption3)
Exit Select
End Select
End If
Return 1
End Function
End Class
فقط کافیه بدین صورت توی کلیه فرمهات صداش بزنی

MyMsgbox.Showmessaage("حذف انجام شد")

ali_md110
شنبه 21 شهریور 1388, 01:24 صبح
یادم رفت یک ماژول بساز و کد زیر رو تعریف کن

Public MyMsgbox As New My_MessageBox

sari-1369
شنبه 21 شهریور 1388, 08:13 صبح
Public MyMsgbox As New My_MessageBox


ممنون از راهنماییتون ، این رو بازم باید تو هر فرم تعریف کرد ؟

sari-1369
شنبه 21 شهریور 1388, 08:17 صبح
جوابش رو پیدا کردم :



سلام
namespace شما یا باید import شود و یا تایپ شود.
اما تابع MsgBox قدیمی VB.Net (که برای راحتی VB6 کارها اضافه شده و بهتر است شما استفاده اش نکنید!) از ان جهت نیاز به تایپ ندارد که در Module تعریف شده و Namespace اش برای کل پروزه یکبار import شده.

به زیر دقت کنید:
VBProject->Properties->References

اگر فضای نامی را در لیست Imported Namespaces ها وارد کنید، این import در این محل به کل پروژه اعمال میشود.
MsgBox و سایر توابع قدیمی و شبیه سازی شده VB6 هم برای این اصولاً تنها ذکر میشوند که Microsoft.VisualBasic در این محل import شده.

خلاصه Namespace خود را در این محل import کنید تا همان وضعیت برای کد شما هم ایجاد شود.
موفق باشید.

Navid Asadi
شنبه 21 شهریور 1388, 08:59 صبح
خوب به ما هم بگو

sari-1369
شنبه 21 شهریور 1388, 16:10 عصر
خوب به ما هم بگو

اصلا پست قبلیمو خوندی ؟ :لبخند:

جوابی که گرفتمو نقل قول کردم .