نمایش نتایج 1 تا 20 از 20

نام تاپیک: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

  1. #1

    ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    با سلام دوستان من میخام با رویداد paint فرم یه کادر مستطیلی طراحی کنم و داخل فرمم یه تکست باکس بزارم و کاربر زمانی که داخل تکست باکس متنی رو تایپ میکنه اندازه کادر طراحی شده براساس طول ، سایز و قالب بندی رشته تغییر پیداکند و متن داخل باکس نمایش داده شود دوستان ممنون میشم راهنمایی بفرمایید

  2. #2

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    با سلام دوستان من میخام با رویداد paint فرم یه کادر مستطیلی طراحی کنم و داخل فرمم یه تکست باکس بزارم و کاربر زمانی که داخل تکست باکس متنی رو تایپ میکنه اندازه کادر طراحی شده براساس طول ، سایز و قالب بندی رشته تغییر پیداکند و متن داخل باکس نمایش داده شود دوستان ممنون میشم راهنمایی بفرمایید
    با Graphics.MeasureString و TextRenderer.MeasureText ابعاد متن رو محاسبه می کنند. یک وقت هست که طول کادر ثابت ئه و باید صرفا ارتفاع کادر متغیر باشه و محاسبه بشه.
    f1.png
    در اینصورت اگر طول سطر طولانی باشه باید شکسته بشه به سطر های بعد :
    f2.png
    اما یک وقت هست که طول و عرض هر دو متغیر ئه و هر دو باید محاسبه بشه :
    f3.png

    TextSize.rar

  3. #3

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

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

  4. #4

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    ممنون از پاسختون دوست گرامی حالا من میخام یه کار دیگه ای انجام بدم و اونم اینه که اگه حالت FixedWidth رو انتخاب کردم در این صورت ظولش تغییر میکنه و اگه متنم طولانی بشه چون اندازه فرممم هیچ تغییری نمیکنه مابقی متنو نمیتونم ببینم در این حالت باید چکار کرد . بعد اگه بخام به جای مستطیل یه کادر بالونی بزارم باید چکار کنم
    اگه طول کادر ثابت نباشه، ممکنه اونقدر متنی طولانی بشه که رسم از فرم بزنه بیرون و باقیش دیده نشه، پس یا باید متن در رسم Word Wrap بشه و بقیه نوشته شکسته بشه در سطر های بعدی و یا رسم طولانی بمونه اما با اضافه کردن ScrollBar اجازه Scroll شدنش رو بدید.
    هر چیز دیگری هم که بخواهید پشت متن رسم کنید فقط باید قبل از رسم متن انجام بشه، می توانید قبل از رسم متن هر چیزی رسم کنید و در انتها متن رو رویش رسم کنید.
    f4.png
    TextSize2.rar

  5. #5

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    ممنون از پاسختون دوست عزیز ، من یه گرید ویو تو فرمم دارم میخام یه چیزی شبیه این بشه ولی متاسفانه تو این زمینه من اطلاعاتی ندارم


  6. #6

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم


  7. #7

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

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

    طبعا برای یادگیری پیاده سازی هر چیزی باید بصورت جزء به جزء پیش برید، یکدفعه از DataGridView به ChatBox نمیشه رسید.
    DataGridView برای این منظور چندان مناسب نیست، ListBox بهتره،
    ListBox یک مشخصه DrawMode داره که در حالت OwnerDrawFixed رسم اش رو خودتون انجام می دهید ولی ارتفاع آیتم ها یکسان ئه و در حالت DrawMode ئه OwnerDrawVariable رسم رو خودتون انجام می دهید و ارتفاع هر آیتم متفاوت ئه (مثل همین مثال چت).
    ListBox یک رخداد MeasureItem داره که در حالت OwnerDrawVariable از برنامه نویس میپرسه که عرض این آیتم فلان باید چقدر باشه و اونجا ابعاد رو بر حسب محتویاتش محاسبه می کنید.

  8. #8

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    بازم ممنون از پاسختون عزیز ، دوست گرامی مثال از این لیست باکس دارید ؟

  9. #9

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    بازم ممنون از پاسختون عزیز ، دوست گرامی مثال از این لیست باکس دارید ؟
    روال کار خیلی مشخص ئه، در DrawItem اون آیتمی که ListBox میخواد الان نشون بده رو در جایی که ListBox بهمون میگه رسم می کنیم و در MeasureItem ابعاد آیتمی که ListBox میخواد ابعادش رو بدونه مشخص می کنیم.

    private void button1_Click(object sender, EventArgs e)
    {
    listBox1.Items.Add(new object[] { textBox1.Text, DateTime.Now });
    textBox1.Text = "";
    textBox1.Focus();
    }

    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
    if ((e.Index < 0) || (e.Index >= listBox1.Items.Count))
    {
    return;
    }
    var item = (object[])listBox1.Items[e.Index];
    var text = (string)item[0];
    var date = (DateTime)item[1];
    var format = new StringFormat (StringFormat.GenericDefault);
    format.FormatFlags |= StringFormatFlags.NoClip | StringFormatFlags.DirectionRightToLeft;
    format.Trimming = StringTrimming.None;
    var size = Size.Round( e.Graphics.MeasureString (text, listBox1.Font, listBox1.ClientSize.Width - 20, format));
    size.Width = Math.Max(30, size.Width);
    var rect = new Rectangle(e.Bounds.Right - size.Width - 20, e.Bounds.Top, size.Width + 18, size.Height + 20);
    var renderer = new VisualStyleRenderer (VisualStyleElement.ToolTip.Balloon.Normal);
    renderer.DrawBackground(e.Graphics, rect);
    rect.Inflate(-5, -5);
    e.Graphics.DrawString(text, listBox1.Font, Brushes.Black, rect, format);
    format.LineAlignment = StringAlignment.Far;
    rect.Offset(0, 3);
    using (var font = new Font(listBox1.Font.FontFamily, listBox1.Font.SizeInPoints - 2f))
    {
    e.Graphics.DrawString(date.ToString("HH:mm"), font, Brushes.Gray, rect, format);
    }
    }

    private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
    {
    var item = (object[]) listBox1.Items[e.Index];
    var text = (string)item[0];
    var date = (DateTime)item[1];
    var format = new StringFormat( StringFormat.GenericDefault);
    format.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
    format.Trimming = StringTrimming.None;
    var size = Size.Round(e.Graphics.MeasureString (text, listBox1.Font, listBox1.ClientSize.Width - 20, format));
    e.ItemHeight = size.Height + 22;
    }


    f6.png

    ChatBoxSample.rar

  10. #10

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    سلام سپاس بی کران از شما دوست عزیز آیا کلاس VisualStyleRendere ماهیتش نمایش آیتم های لیست ویو در قالب کنترل های پیش فرض ویژوال استودیو هستش یا علاوه بر نمایش میتونیم از کنتزل ها مثل خود کنترل های ویژوال استودیو استفاده کنیم آیا اینجام هم میتونیم اینکارو بکنیم
    آخرین ویرایش به وسیله arastoahmadi : چهارشنبه 31 اردیبهشت 1399 در 09:47 صبح

  11. #11

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    سلام سپاس بی کران از شما دوست عزیز آیا کلاس VisualStyleRendere ماهیتش نمایش آیتم های لیست ویو در قالب کنترل های پیش فرض ویژوال استودیو هستش یا علاوه بر نمایش میتونیم از کنتزل ها مثل خود کنترل های ویژوال استودیو استفاده کنیم آیا اینجام هم میتونیم اینکارو بکنیم
    VisualStyleRenderer به ویژوال استدیو کاری نداره، برای یک کنترل خاص هم نیست، هر چی کنترل استاندارد در Visual Styles ویندوز تعریف شده رو میتونه رسم کنه.

    ویندوز یک سیستم واسط کاربر گرافیکی داره به اسم Windows Visual Styles که همه کنترل ها با یک Theme نمایش داده میشن و تا یک Theme جدید برایش انتخاب می کنید ظاهر همه کنترل ها در ویندوز عوض میشه. این VisualStyleRenderer موتور رسم همون Visual Styles ئه، با همون Theme ای که کنترل های استاندارد رسم میشن برای شما هم چیزی رو که میخواهید رسم می کنه. برای برنامه نویسی بدرد میخوره که میخواد یک کنترل اختصاصی دست ساز خودش رو با ظاهر یک کنترل استاندارد رسم کنه.
    مثلا بهش میگید در فلان موقعیت یک ScrollBar رو رسم کن، ظاهر یک Button فشرده شده رو رسم کن، کادر دور یک TextBox رو رسم کن، دکمه Close یک پنجره رو رسم کن و ...
    VisualStyleRenderer هر بخشی از کنترل های استاندارد ویندوز (که در Theme ویندوز تعریف شده) رو میتونه در بخشی از یک رسم نمایش بده.
    بهتون این امکان رو میده که یک کنترل اختصاصی رو با ظاهر شبیه به Theme ویندوز رسم کنید، طوری که با ظاهر بقیه کنترل ها هماهنگ باشه.

  12. #12

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    دوست عزیز همه چی بسیار عالی بود ما برای گرفتن اندازه طول رشته مون از MessureString استفاده می کنیم حالا اگه بخایم هم متن و هم عکسرو با هم بفرستیم باید چکار کنیم چون من تو تمام متدها گشتم برای گرفتن اندازه عکس متدی مثله MessureString وجود ندارد ممنون میشم یه راهنمایی بفرمایید

  13. #13

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    دوست عزیز همه چی بسیار عالی بود ما برای گرفتن اندازه طول رشته مون از MessureString استفاده می کنیم حالا اگه بخایم هم متن و هم عکسرو با هم بفرستیم باید چکار کنیم چون من تو تمام متدها گشتم برای گرفتن اندازه عکس متدی مثله MessureString وجود ندارد ممنون میشم یه راهنمایی بفرمایید
    ابعاد تصویر مشخصه، دیگه Measure نمیخواد.
    شیء عکس یا از نوع Image ئه یا Bitmap که Bitmap هم خودش یک نوع Image ئه.
    Image هم Image.Size و Image.Width و Image.Height داره که معلوم می کنه ابعادش چیه.

  14. #14

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    ممنون از راهنماییتون دوست گرامی

    فقط میخاستم بدونم اون قسمتی که متغییرهای text و Date رو تعریف میکنیم من اگه متغییر دیگه ای اضافه کنم مثلا متغییر Image موقع مقداردهی کردنش من شاید نخوام متغییر Image رو مقدار دهی کنم بنابراین اررور میگیره که شما باید حتما اون متغییر رو هم مقدار دهی کنید ممنون میشم یه راهنمایی کنید


  15. #15

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    ممنون از راهنماییتون دوست گرامی

    فقط میخاستم بدونم اون قسمتی که متغییرهای text و Date رو تعریف میکنیم من اگه متغییر دیگه ای اضافه کنم مثلا متغییر Image موقع مقداردهی کردنش من شاید نخوام متغییر Image رو مقدار دهی کنم بنابراین اررور میگیره که شما باید حتما اون متغییر رو هم مقدار دهی کنید ممنون میشم یه راهنمایی کنید

    شرط قرار بدهید، مثلا اول بررسی کنید که item.Length چیه، که فرضا اگر 2 تا عضو داشت item.Length برابر 2 میشه. اگر سه تا عضو داشت می توانید عضو سوم (item[2]) رو که میتونه Image باشه بخونید و وگرنه سراع item[2] نروید چون اندیس 2 در آرایه 2 عضوی وجود نداره (فقط اندیس 0 و 1 رو داره)
    در ضمن می توانید بررسی کنید که اون item[0] نوع اش چیه، که فرضا اگر string نبود صریحا cast به string نکنید، با as می توانید جلوی بروز خطا رو بگیرید. اگر نوع اش مطابقت نداشته باشه as بجای خطا مقدار null برمیگردونه.

    var item = (object[])listBox1.Items[e.Index];
    var text = item[0] as string;
    var image = item[0] as Image;
    var date = (DateTime)item[1];
    if ((item.Length == 3) && (image == null))
    {
    image = item[2] as Image;
    }
    var format = new StringFormat(StringFormat.GenericDefault);

    یا می توانید کد رو کلا طوری بنویسید که با هر ترتیبی از رشته و تاریخ و تصویر بشه بهش پارامتر ارسال کرد و مهم نباشه که فرضا اول تاریخ رو ارسال می کنید یا آخر یا وسط :

    var item = (object[])listBox1.Items[e.Index];
    string text = null;
    DateTime date;
    Image image = null;
    foreach (var value in item)
    {
    if (value is string)
    {
    text = (string)value;
    }
    else if (value is DateTime)
    {
    date = (DateTime)value;
    }
    else if (value is Image)
    {
    image = (Image)value;
    }
    }
    var format = new StringFormat(StringFormat.GenericDefault);

  16. #16

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

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

  17. #17

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    ممنون از پاسختون دوست گرامی راستی دوست عزیز زمانی که متن طولانی باشد از لیست باکس میزنه بیرون ممنون میشم اینم یه راهنمایی بکنید
    کدتون ایراد داره، کدی که برای رسم نوشتید رو با کدی که من برای رسم نوشته بودم مقایسه کنید.

  18. #18

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    ChatBoxSample.rar

    دوست عزیز من این لینک رو دانلود کردم

    یه نکته که باید خدمتتون عرض کنم اینه که تمامی متن بالا برای یه سطره

  19. #19

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    ChatBoxSample.rar

    دوست عزیز من این لینک رو دانلود کردم

    یه نکته که باید خدمتتون عرض کنم اینه که تمامی متن بالا برای یه سطره
    یک سطر؟ اگر متن در کادر ListBox جا نشه طبعا بیرون میزنه و چون متن خیلی طولانی است ListBox نمیتونه آیتم با این ارتفاع رو مدیریت کنه.
    هم حداکثر ارتفاع رو محدود کنید و هم متن های طولانی تر رو با ... کوتاه کنید (StringTrimming.EllipsisCharacter)

    var format = new StringFormat(StringFormat.GenericDefault);
    format.FormatFlags |= StringFormatFlags.NoClip | StringFormatFlags.DirectionRightToLeft;
    format.Trimming = StringTrimming.EllipsisCharacter;
    var size = Size.Round(e.Graphics.MeasureString(text, listBox1.Font, listBox1.ClientSize.Width - 20, format));
    size.Width = Math.Max(30, size.Width);
    size.Height = Math.Min(100, size.Height);


    var format = new StringFormat(StringFormat.GenericDefault);
    format.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
    format.Trimming = StringTrimming.EllipsisCharacter;
    var size = Size.Round(e.Graphics.MeasureString(text, listBox1.Font, listBox1.ClientSize.Width - 20, format));
    size.Height = Math.Min(100, size.Height);
    e.ItemHeight = size.Height + 22;
    }

  20. #20

    نقل قول: ساخت کادر و نوشتن متن در آن با رویداد paint فرم

    ممنون از پاسختون دوست عزیز من برنامه رو به این شکل تغییر دادم
    Capture.PNG

    فقط میخام مثله تصویر زیر فایل ضمیمه بهش پیوست بدم اگه بخام فایل رو از اس کیو ال بخونه باید چطوری کدو تغییر بدم و اگر لینک باشه باید چطوری تغییر بدم ممنون میشم یه راهنمایی کنید


تاپیک های مشابه

  1. فراخوانی رویداد Paint در رویداد کلیک روی Button
    نوشته شده توسط puvinax در بخش C#‎‎
    پاسخ: 10
    آخرین پست: سه شنبه 10 فروردین 1389, 08:09 صبح
  2. سوال: رویداد paint?
    نوشته شده توسط vahid.bz در بخش C#‎‎
    پاسخ: 2
    آخرین پست: سه شنبه 16 تیر 1388, 23:50 عصر
  3. رویداد Paint چجوری همون OnPaint هست؟!!!!!!
    نوشته شده توسط hanieh66 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 11 دی 1387, 21:23 عصر
  4. [ override کردن OnPaint + رویداد Paint فرم ] و زمان اجرای این دو
    نوشته شده توسط HosseinProgrammer در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 14 فروردین 1387, 19:41 عصر
  5. چطور از drowline خارج از رویداد paint استفاده کنیم؟
    نوشته شده توسط mirtalebi در بخش VB.NET
    پاسخ: 1
    آخرین پست: یک شنبه 18 تیر 1385, 21:25 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •