PDA

View Full Version : نوشتن بر روی فرم



omid-vbAuto
پنج شنبه 04 آذر 1389, 10:42 صبح
سلام دوستان

چطوری می تونیم تو VB.Net بر روی خود فرممون تایپ کنیم؟

قبلا من این کارو تو vb 6.0 با دستور Print انجام می دادم.

Saman_12
پنج شنبه 04 آذر 1389, 11:33 صبح
Dim Eg As Graphics = Me.CreateGraphics

Eg.DrawString("Saman", New Font("", 10, FontStyle.Italic, GraphicsUnit.Pixel), Brushes.SkyBlue, 50, 50)
جستجو!

omid-vbAuto
پنج شنبه 04 آذر 1389, 11:42 صبح
Dim Eg As Graphics = Me.CreateGraphics

Eg.DrawString("Saman", New Font("", 10, FontStyle.Italic, GraphicsUnit.Pixel), Brushes.SkyBlue, 50, 50)
جستجو!


مهندس چیزی چاپ نشد!

pedram_ns
پنج شنبه 04 آذر 1389, 11:45 صبح
یک توضیحی می دید که این چطوری شد؟

omid-vbAuto
پنج شنبه 04 آذر 1389, 11:48 صبح
یک توضیحی می دید که این چطوری شد؟

یعنی چی؟:لبخند:

خوب کدی که دوستمون داده کار نمی کنه.:اشتباه:

ali_najari
پنج شنبه 04 آذر 1389, 14:03 عصر
دوست عزیز من قبلا یه برنامه واسه یکی از دوستان آماده کرده بودم برای کشیدن خط و مستطیل بر روی فرم!

یه سرچ برنید

ali_najari
پنج شنبه 04 آذر 1389, 14:03 عصر
کدی هم که دوستمان نوشتن نباید مشکلی داشته باشه

alimanam
پنج شنبه 04 آذر 1389, 14:32 عصر
با سلام

از این روش میتونین استفاده کنین . موفق باشید .

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

Dim dc As Graphics = e.Graphics
Dim drawString As String = "برنامه نويس"
Dim drawFont As New Font("Tahoma", 20, FontStyle.Bold)
Dim myBrush As New Drawing2D.LinearGradientBrush(ClientRectangle, Color.Yellow, Color.Blue, Drawing2D.LinearGradientMode.Horizontal)
Dim drawFormat As New StringFormat()
Dim x As Integer = 150
Dim y As Integer = 50

drawFormat.FormatFlags = StringFormatFlags.NoFontFallback
dc.DrawString(drawString, drawFont, myBrush, x, y, drawFormat)

End Sub

omid-vbAuto
پنج شنبه 04 آذر 1389, 19:23 عصر
با سلام

از این روش میتونین استفاده کنین . موفق باشید .

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

Dim dc As Graphics = e.Graphics
Dim drawString As String = "برنامه نويس"
Dim drawFont As New Font("Tahoma", 20, FontStyle.Bold)
Dim myBrush As New Drawing2D.LinearGradientBrush(ClientRectangle, Color.Yellow, Color.Blue, Drawing2D.LinearGradientMode.Horizontal)
Dim drawFormat As New StringFormat()
Dim x As Integer = 150
Dim y As Integer = 50

drawFormat.FormatFlags = StringFormatFlags.NoFontFallback
dc.DrawString(drawString, drawFont, myBrush, x, y, drawFormat)

End Sub

سلام علی جان

کدی رو که نوشتن وقتی اجرا می کنم خودش اجرا میشه!!!منظورم اینه که تو load فورمم کدهای شما رو نمی ذارم ولی خودش با بالا امدن فرم اجرا میشه چرا؟

بهدش هم فکر می کنم منظورمو خوب نگفتم من نمی خوام از این همه کد استفاده کنم.بطور مثال ما تو VB6 از یک خط کد استفاده می کردیم.مثل:







f = "ddddddddd"
Print , f

omid-vbAuto
پنج شنبه 04 آذر 1389, 19:24 عصر
کدی هم که دوستمان نوشتن نباید مشکلی داشته باشه


اگه امتحان کنید مشکل داره.خودتون ببینید.

alimanam
پنج شنبه 04 آذر 1389, 19:43 عصر
سلام امید جان ( چه دل و قلوه این وسط داره پاسکاری میشه :قهقهه: عید همگی مبارک باشه )


کدی رو که نوشتن وقتی اجرا می کنم خودش اجرا میشه!!!منظورم اینه که تو load فورمم کدهای شما رو نمی ذارم ولی خودش با بالا امدن فرم اجرا میشه چرا؟

خوب باید هم اجرا بشه دیگه !!! چرا به تابع و آرگومانی که داره ( آرگومان e ) توجه نمیکنی !!! به تابع و Overrides کردن تابع Onpaint فرم توجه کن متوجه میشین . ( کدهایی که در تابع Overrides شده تابع OnPaint فرم نوشته شده )


بهدش هم فکر می کنم منظورمو خوب نگفتم من نمی خوام از این همه کد استفاده کنم.بطور مثال ما تو VB6 از یک خط کد استفاده می کردیم.مثل:

ما تو وی بی 6 خیلی چیزا مینوشتیم اما در ورژن های بالاتر vb6 دیگه نمیونیم به اون صورتی که در vb6 از این کدها استفاده میشد در اینجا ( وی بی دات نت 7 به بالا ) استفاده کنیم . چند خط کد این همه کد نمیشه که عزیز :لبخندساده: تازه خوت یه دیدی به کد بزنی ( بیشتر توجه کنی ) متوجه میشین که چند خط از اون کد رو میشه حذف کرد و جور دیگه ایی هم نوشت که کوتاه تر بشه من بیشتر خواستم خوانایی کدها بهتر باشه موفق باشی عزیز .

Saman_12
پنج شنبه 04 آذر 1389, 20:22 عصر
مهندس چیزی چاپ نشد!

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

کد Ali هم فقط به دلیل اینکه رویداد Paint رو Overrides کرده جواب میده و نوشته از روی فرم پاک نمیشه.(منظورم اینه که از همون اول نوشته روی فرم رسم میشه و وقتی که نوشته پاک بشه این کد دو باره اجرا میشه.)

چند وقت پیش یک تایپیک دقیقا با همین موضوع ایجاد شده بود.(فقط جهت اطلاع!)

omid-vbAuto
جمعه 05 آذر 1389, 12:18 عصر
کدی هم که گذاشتم کار میکنه اما شما تویه فرم لود از استفاده میکنی به همین دلیل کار نمیکنه.(شما اگه تونستی فرم رو موقع لود شدن هایدن کنی اون وقت کد من هم کار میکنه!.)





سلام اقای محصل منظورتون از جمله ی بالا چیه من که نفهمیدم؟؟؟

omid-vbAuto
جمعه 05 آذر 1389, 12:21 عصر
سلام علی جان(دل و قلوه ...)

علی من در مورد جمله پایینیتون اطلاعات کمی دارم میتونید بیشتر توضیح بدین.و آیا می تونیم کد های شما رو به صورت load استفاده کنیم؟





خوب باید هم اجرا بشه دیگه !!! چرا به تابع و آرگومانی که داره ( آرگومان e ) توجه نمیکنی !!! به تابع و Overrides کردن تابع Onpaint فرم توجه کن متوجه میشین . ( کدهایی که در تابع Overrides شده تابع OnPaint فرم نوشته شده )

alimanam
جمعه 05 آذر 1389, 16:46 عصر
سلام امید جان


علی من در مورد جمله پایینیتون اطلاعات کمی دارم میتونید بیشتر توضیح بدیناول یکم سرچ کن بعد اگه بازم اطلاعاتت بیشتر نشد من در خدمتم . :لبخندساده:



و آیا می تونیم کد های شما رو به صورت load استفاده کنیم؟
الانم در هنگام لود شدن فرم رخداد onPaint داره اتفاق میفته . یعنی به مجرد لود شدن فرم این رخداد اتفاق میفته . شما میتونستی مستقیم هم اون کدها رو در رخداد Overrides نشده onPaint فرم استفاده کنین و نتیجه مشابه بگیرین . حتی میتونستی به جای استفاده از شی گرافیکی از یه کنترل لیبل استفاده کنی و در ران تایم اون رو به فرم خودت ( به قول شما در رخداد Load فرم ) اضافه کنی مثلاً اینجوری :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim lblObj As New Label
lblObj.Text = "Barnamenevis"
lblObj.AutoSize = True
lblObj.Top = 100
lblObj.Left = 120
lblObj.Font = New Font("Tahoma", 20, FontStyle.Bold)
Me.Controls.Add(lblObj)
End Sub

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

موفق باشید .

omid-vbAuto
جمعه 05 آذر 1389, 16:54 عصر
سلام امید جان

اول یکم سرچ کن بعد اگه بازم اطلاعاتت بیشتر نشد من در خدمتم . :لبخندساده:



الانم در هنگام لود شدن فرم رخداد onPaint داره اتفاق میفته . یعنی به مجرد لود شدن فرم این رخداد اتفاق میفته . شما میتونستی مستقیم هم اون کدها رو در رخداد Overrides نشده onPaint فرم استفاده کنین و نتیجه مشابه بگیرین . حتی میتونستی به جای استفاده از شی گرافیکی از یه کنترل لیبل استفاده کنی و در ران تایم اون رو به فرم خودت ( به قول شما در رخداد Load فرم ) اضافه کنی مثلاً اینجوری :


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


Dim lblObj As New Label
lblObj.Text = "Barnamenevis"
lblObj.AutoSize = True
lblObj.Top = 100
lblObj.Left = 120
lblObj.Font = New Font("Tahoma", 20, FontStyle.Bold)
Me.Controls.Add(lblObj)
End Sub



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


موفق باشید .


علی جان اگه لینک میدای خیلی خوب می شود.گشتم نبود.

Saman_12
جمعه 05 آذر 1389, 19:54 عصر
سلام اقای محصل منظورتون از جمله ی بالا چیه من که نفهمیدم؟؟؟

منظورم اینکه وقتی شما بخوای توی رویداد Load از کدی که گذاشتم استفاده کنید چیزی بروی فرم رسم نمیشه.

تاحالا شده شما بخوای فرم موقع بالا اومدنظاهر نشه یعنی از همون اول هایدن باشه ؟
خوب جوابش راحت هست شما از همون اول توی فرم Load از دستور هایدن استفاده میکنی اما این کار جواب نمیده درباره اینکه چرا نمیشه من یک سوال پرسیدم فهمیدم چون فرم هنوز هایدن هست نمیشه هایدنش کرد برای رسم گرافیک هم همین طوره چون اگر شما روی فرم شکل گرافیکی رسم کنید و بعد روی فرم یک پنجره بیاد اون شی پاک میشه یا اینکه فرم رو هایدن کنی و بعد دوباره Show کنید.

omid-vbAuto
جمعه 05 آذر 1389, 21:21 عصر
منظورم اینکه وقتی شما بخوای توی رویداد Load از کدی که گذاشتم استفاده کنید چیزی بروی فرم رسم نمیشه.

تاحالا شده شما بخوای فرم موقع بالا اومدنظاهر نشه یعنی از همون اول هایدن باشه ؟
خوب جوابش راحت هست شما از همون اول توی فرم Load از دستور هایدن استفاده میکنی اما این کار جواب نمیده درباره اینکه چرا نمیشه من یک سوال پرسیدم فهمیدم چون فرم هنوز هایدن هست نمیشه هایدنش کرد برای رسم گرافیک هم همین طوره چون اگر شما روی فرم شکل گرافیکی رسم کنید و بعد روی فرم یک پنجره بیاد اون شی پاک میشه یا اینکه فرم رو هایدن کنی و بعد دوباره Show کنید.

دوست من ،من که چیزی نفهمیدم :لبخندساده:

ولی به اون چیزی که می خواستم تقریبا رسیدم.کد هاش مال شماست با کمی ویرایش:





Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Eg As Graphics = Me.CreateGraphics
Eg.DrawString(" ", New Font("B Titr", 20, FontStyle.Bold, GraphicsUnit.Pixel), Brushes.Red, 100, 100)
End Sub