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

نام تاپیک: برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    Iran
    پست
    1,338

    برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

    سلام.
    لطفاً این سناریو رو بخونید


    یک کادر با طول 350 و عرض 100 داریم

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

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

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

    پنج خط در این باکس جا میشن
    .................
    یک اینتر
    این یک اینتر در خط اول
    در خط دوم
    در خط سوم
    در خط چهارم
    در خط پنجم
    .............
    دو اینتر
    در خط اول و دوم
    اول و سوم
    اول و چهارم
    .
    .
    .
    و به همین ترتیب اومدم حالات مختلف وجود داشتن اینتر در متن رو در نظر گرفتم (که البته این متن می تونه یک کلمه باشه یا حتی بیشتر از 5 خط باشه یعنی اشکالی نداره تیتر از باکس بزنه بیرون ولی متن کوتاه نباید بزنه بیرون)

    من فایل رو ضمیمه کردم. چون کدها طولانی هست و فکر کنم این طوری بهتره. در ضمن من با Asp.net این برنامه رو نوشتم و دیتابیس اکسس ولی چون تمرکز روی برنامه نویسی هست اینجا گذاشتم.
    توضیح اینکه: اومدم متن رو گرفتم با کاراکتر اینتر اسپلیت کردم و ریختم در یک آرایه
    مثلاً گفتم اگه
    result.length

    برابر با 2 باشه معلومه که 1 اینتر در متن وجود داره و اگه
    result[0]<L
    معلوم میشه خط اول اینتر داره
    حالا اومدم گفتم
    if (result[1].Length>3*L)
    {
    Literal3.Visible = false;
    }

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


    خودم احساس می کنم خیلی بد کدنویسی کردم. و شاید حتی کارم درست هم نباشه ولی خودم امتحان که کردم فعلاً که جواب داده.
    ولی ممکنه من حالتی رو در نظر نگرفته باشم. و همینطور فکر می کنم حتی اگه جواب بده خیلی بهتر و با کدنویسی کمتر از این میشه به نتیجه رسید

    در کل میخوام بدونم شما در مورد حل این مسئله چی به ذهنتون می رسه و چطور کدنویسی می کنید این رو؟

    فایل رو قرار می دم لطفاً راهنمایی کنید.
    فایل های ضمیمه فایل های ضمیمه

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    Iran
    پست
    1,338

    نقل قول: برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

    نمی دونم شاید کسی حوصله دانلود کردن نداره.
    کدها رو هم می زارم. منتظر راهنمایی هستم.
     public void LoadData()
    {
    OleDbDataReader dr = DBase.ExecuteReader(System.Data.CommandType.Text, "select * from tbl", new OleDbParameter[]{
    });

    while (dr.Read())
    {
    Literal2.Text = dr["tb_title"].ToString();
    Literal3.Text = dr["tb_abs"].ToString();
    }

    lblnumberoftotalchar.Text = CountTotalChars(Literal2.Text).ToString();
    long CTotalChars = CountTotalChars(Literal2.Text);

    string titr = Literal2.Text;

    string[] separators = new string[] { "\r\n" };
    string[] result;
    int L =35;
    int line = 0;

    result = titr.Split(new string[] { "\r\n" }, StringSplitOptions.None);
    //if (result.Length<=5)
    //{

    //}
    if (result.Length > 0)
    {
    Response.Write("result 0=" + result[0]);
    }
    if (result.Length > 1)
    {
    Response.Write("result 1=" + result[1]);
    }
    if (result.Length > 2)
    {
    Response.Write("result 2=" + result[2]);
    }
    if (result.Length > 3)
    {
    Response.Write("result 3=" + result[3]);
    }
    if (result.Length > 4)
    {
    Response.Write("result 4=" + result[4]);
    }
    if (result.Length > 5)
    {
    Response.Write("result 5=" + result[5]);
    }






    Label1.Text = result.Length.ToString();

    Literal2.Text = Literal2.Text.Replace("\r\n", "<br>");

    switch (result.Length)
    {
    case 1:
    if (CTotalChars > 100)
    {
    Literal3.Visible = false;
    }
    break;
    case 2://1 enter
    // enter in line one

    //long s2 = CTotalChars - result[0].Length;
    // طول تقریبی یک خط 40
    if (result[0].Length<L)// enter in line one
    {
    line++;
    //long s2 = CTotalChars - L;
    if (result[1].Length>3*L)
    {
    Literal3.Visible = false;
    }

    }
    if ((L < result[0].Length) && (result[0].Length < 2*L))//enter in line two
    {
    line++;
    //long s2 = CTotalChars - 2*L;
    if (result[1].Length > 2*L)
    {
    Literal3.Visible = false;
    }
    }

    if ((2*L < result[0].Length) && (result[0].Length < 3 * L))//enter in line three
    {
    line++;
    //long s2 = CTotalChars - 2*L;
    if (result[1].Length > 1 * L)
    {
    Literal3.Visible = false;
    }
    }

    if ((2 * L < result[0].Length) & (result[0].Length < 4 * L))//enter in line four
    {

    line++;
    //long s2 = CTotalChars - 2*L;
    if (result[1].Length > 0 * L)
    {
    Literal3.Visible = false;
    }

    }

    if ((3 * L < result[0].Length) & (result[0].Length < 5 * L))//enter in line five
    {

    Literal3.Visible = false;

    }

    break;
    case 3://2 enter
    if (result[0].Length<L)
    {
    if (result[1].Length<L) //enter in line one and two
    {
    if (result[2].Length>3*L)
    {
    Literal3.Visible = false;
    }
    }

    if (result[1].Length > L & result[1].Length < 2*L) //enter in line one and three
    {
    if (result[2].Length > 2 * L)
    {
    Literal3.Visible = false;
    }
    }
    if (result[1].Length > 2*L & result[1].Length < 3 * L) //enter in line one and four
    {
    if (result[2].Length > 1 * L)
    {
    Literal3.Visible = false;
    }
    }

    if (result[1].Length > 3 * L & result[1].Length < 4 * L) //enter in line one and five
    {
    Literal3.Visible = false;
    }

    }


    if (result[0].Length < 2 * L & result[0].Length > L)//first enter in line two
    {

    if (result[1].Length > 2 * L & result[1].Length < 3 * L)//enter in line two and three
    {
    Literal3.Visible = false;
    }

    if (result[1].Length > 3 * L & result[1].Length < 4 * L)//enter in line two and four
    {
    Literal3.Visible = false;
    }

    if (result[1].Length > 4 * L & result[1].Length <5*L)//enter in line two and five
    {
    Literal3.Visible = false;
    }
    }
    if (result[0].Length < 3 * L & result[0].Length >2* L)//first enter in line three
    {

    if (result[1].Length>0 & result[1].Length <2*L )//enter in line three and four
    {
    if (result[2].Length>L)
    {
    Literal3.Visible = false;
    }


    }
    if (result[1].Length>L & result[1].Length < 3 * L)//enter in line three and five
    {
    Literal3.Visible = false;
    }

    }


    if (result[0].Length>3*L & result[1].Length<2*L)//enter in line four and five
    {
    Literal3.Visible = false;
    }


    break;
    case 4://3 enter
    if (result[0].Length<L)
    {
    if (result[1].Length<L & result[2].Length<L)//enter in line one,two,three
    {
    if (result[3].Length > 2 * L)
    {
    Literal3.Visible = false;
    }

    }
    if (result[1].Length < L)//enter in line one,two,four
    {
    if (result[2].Length<2*L & result[2].Length <3*L)
    {
    if (result[3].Length > L)
    {
    Literal3.Visible = false;
    }

    }
    }
    if (result[1].Length < L)//enter in line one,two,five
    {
    if (result[2].Length < 3 * L & result[2].Length < 4 * L)
    {
    Literal3.Visible = false;
    }
    }
    //one,three,four
    if (result[1].Length <3*L & result[1].Length>L)
    {
    if (result[2].Length < 2*L & result[2].Length>0)
    {
    if (result[3].Length>0)
    {
    Literal3.Visible = false;
    }
    }

    }
    //one,three,five
    if (result[1].Length < 3 * L & result[1].Length > L)
    {
    if (result[2].Length < 3 * L & result[2].Length > L)
    {
    Literal3.Visible = false;
    }

    }

    }

    if (result[0].Length>L & result[0].Length <2*L)//enter in line two, three, four*************
    {
    if (result[1].Length <2*L & result[1].Length>0)
    {
    if (result[2].Length<2*L & result[2].Length>0 )
    {
    if (result[3].Length>L)
    {
    Literal3.Visible = false;
    }
    }
    }

    }
    if (result[0].Length > L & result[0].Length < 2 * L)//enter in line two, three, five
    {
    if (result[1].Length < 2 * L & result[1].Length > 0)
    {
    if (result[2].Length < 3 * L & result[2].Length > L)
    {

    Literal3.Visible = false;

    }
    }
    }
    if (result[0].Length > 2*L & result[0].Length < 3 * L)//enter in line three, four, five
    {
    if (result[1].Length < 2 * L & result[1].Length > 0)
    {
    if (result[2].Length <2*L & result[2].Length >0)
    {
    Literal3.Visible = false;
    }
    }

    }


    break;
    case 5://4 enter

    if (result[0].Length < L)
    {
    if (result[1].Length < L & result[2].Length < L & result[3].Length<L)//enter in line one,two,three,four
    {
    if (result[4].Length > L)
    {
    Literal3.Visible = false;
    }

    }
    }

    if (result[0].Length < L)//enter in line one,two,three,five
    {
    if (result[1].Length < L & result[2].Length < L)
    {
    if (result[3].Length<3*L & result[3].Length<L)
    {
    Literal3.Visible = false;
    }

    }
    }
    if (true)//enter in line one,three,four,five
    {
    if (result[0].Length<L)
    {
    if (result[1].Length<3*L & result[1].Length>L)
    {
    if (result[2].Length < 2*L & result[2].Length >0)
    {
    if (result[3].Length<2*L & result[3].Length<0)
    {
    if (result[4].Length>0)
    {
    Literal3.Visible = false;
    }
    }
    }
    }

    }

    }
    if (true)//enter in line one,two,four,five
    {
    if (result[0].Length<L)
    {
    if (result[1].Length<2*L & result[1].Length>0)
    {
    if (result[2].Length<3*L & result[1].Length>L)
    {
    if (result[3].Length <2*L & result[3].Length >0)
    {
    Literal3.Visible = false;
    }
    }
    }
    }
    }
    break;

    case 6: // 5 enter
    Literal3.Visible = false;
    break;
    default:
    break;
    }

    }

  3. #3
    کاربر دائمی آواتار shahryari
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    آذربايجان
    سن
    40
    پست
    1,237

    نقل قول: برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

    اومدم کل تیتر رو از دیتابیس خوندم ریختم تعداد کاراکترهاش رو حساب می کنم و به طور تقریبی حساب کردم با کاراکترهای فارسی100 کاراکتر در این باکس جا میشن و می یام می گم متن کوتاه رو وقتی عنوان از 100 بزرگتر بود نشون نده
    سلام
    تشخیص کوتاه یا بلند بودن رشته براساس تعداد کاراکتر ، نمیتونه صحیح باشه به دونمونه زیر نکاه کنید
    الف : اااااااااا
    ب : کککککککککک
    هر جفتش 10 کاراکتر و لی مورد ب بلندتر از مورد الف هست

  4. #4

    نقل قول: برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

    سلام وقت بخیر . تابعی وجود داره که برای کار با Graphic اکثرا ازش استفاده میشه . تو این مورد نیاز شما رو برطرف خواهد کرد.
    System.Windows.Forms
    یادتون نره.
    System.Windows.Forms.TextRenderer.MeasureText("", new System.Drawing.Font("tahoma", 9)).Width;

    موفق باشید

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آبان 1387
    محل زندگی
    Iran
    پست
    1,338

    نقل قول: برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

    تشخیص کوتاه یا بلند بودن رشته براساس تعداد کاراکتر ، نمیتونه صحیح باشه به دونمونه زیر نکاه کنید
    الف : اااااااااا
    ب : کککککککککک
    هر جفتش 10 کاراکتر و لی مورد ب بلندتر از مورد الف هست
    بله. این مورد رو می دونستم. مثلاً حرف س که زیاد باشه متن رو طولانی تر می کنه ولی ما یه مقدار می تونیم برای این خطا طول خط رو کمتر بگیریم.
    سلام وقت بخیر . تابعی وجود داره که برای کار با Graphic اکثرا ازش استفاده میشه . تو این مورد نیاز شما رو برطرف خواهد کرد.
    من وب اپلیکیشن کار می کنم (با زبان سی شارپ) به خاطر همین در این تالار پرسیدم. ویندوز اپلیکیشن نیست این کارم. حالا می رم در مورد TextRenderer.MeasureText جستجو میکنم ببینم کارش چیه و آیا معادلی در وب اپلیکیشن هم داره یا نه ممنون.
    ولی لطفاً هر کس می تونه روش کدنویسی و الگوریتمش رو راهنمایی کنه. ممنون.
    آخرین ویرایش به وسیله bftarane : سه شنبه 16 مهر 1392 در 19:55 عصر

  6. #6

    نقل قول: برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

    من خیلی وقته سی شارپ و کلا WinForm کار نکردم ولی تا اونجا که یادمه بهترین راه واسه این کار اینه که یه TextBox جدید درست کنید و ویژگی AutoSize(یا یه همچین چیزی دقیق یادم نیست) رو برابر true بزارید و بعد اینکه width‌عنصر رو گرفتید از فرم حذفش کنید. اون تابع MeasureText هم دقیق نیست و اگر دقیق بخواید باید یک تابع Trim هم بنویسید که یه مقدار زمانبر هست

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

  7. #7

    نقل قول: برنامه پردازش متن (اگه عنوان از حدی بزرگتر شد متن کوتاه نشان داده نشود در یک کادر)

    نقل قول نوشته شده توسط bftarane مشاهده تاپیک
    بله. این مورد رو می دونستم. مثلاً حرف س که زیاد باشه متن رو طولانی تر می کنه ولی ما یه مقدار می تونیم برای این خطا طول خط رو کمتر بگیریم.
    من وب اپلیکیشن کار می کنم (با زبان سی شارپ) به خاطر همین در این تالار پرسیدم. ویندوز اپلیکیشن نیست این کارم. حالا می رم در مورد TextRenderer.MeasureText جستجو میکنم ببینم کارش چیه و آیا معادلی در وب اپلیکیشن هم داره یا نه ممنون.
    ولی لطفاً هر کس می تونه روش کدنویسی و الگوریتمش رو راهنمایی کنه. ممنون.
    این تابع کارش در Windows Form هست . اما در Web Application هم می تونین استفاده کنین. تا اونجایی که من از این تابع استفاده کردم کارش دقیق بوده. من اکثر کنترل های ساخته خودم رو با این تابع ادغام کردم و بدون مشکل بوده . ممنون میشم مثالی بزنید بنده رو راهنمایی کنید.

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

  1. سوال: تغيير فونت متن نوار عنوان
    نوشته شده توسط Programmer 1 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: جمعه 16 مرداد 1388, 08:26 صبح
  2. سوال: شناساندن برنامه به ویندوز به عنوان بازکننده یک فایل
    نوشته شده توسط haghft در بخش C#‎‎
    پاسخ: 12
    آخرین پست: چهارشنبه 29 خرداد 1387, 20:31 عصر
  3. چگونه متن نوار عنوان پیغام های اکسس را تغییر دهیم؟
    نوشته شده توسط سیامک سیامک در بخش Access
    پاسخ: 6
    آخرین پست: جمعه 03 اسفند 1386, 18:49 عصر
  4. برنامه اجرایی فاکس به عنوان زمینه دسکتاپ ویندوز
    نوشته شده توسط abdorreza در بخش Foxpro
    پاسخ: 4
    آخرین پست: یک شنبه 11 آذر 1386, 14:20 عصر
  5. بستن یک برنامه با استفاده از عنوان آن
    نوشته شده توسط MAiLDEREMi در بخش VB.NET
    پاسخ: 7
    آخرین پست: جمعه 22 تیر 1386, 04:37 صبح

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

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