PDA

View Full Version : سوال: فضا اشغال نکردن کنترلهای نامرئی در صفحه



h.alizadeh
جمعه 01 شهریور 1387, 00:24 صبح
سلام،

من در فرمم یکسری لیبل و تکست باکس و فایل آپلود دارم که پیش فرض visible=False اند و تحت شرایط خاصی توروشون میکنم ...

من میخوام وقتی ویزیبلشون فالس ه فضایی رو اشغال نکنند...
مثلا الان توی یک سطر جدول 5تا فایل آپلود زیرهم گذاشتم که نامرئی اند ولی فضا اشغال می کنند مثلا من میخوام فایل آپلود وسطی رو ویزیبل کنم و بقیه همینطوری فالس بمونند ولی فایل آپلود وسط نمایش داده میشه!!
اما من می خوام باتوجه به اینکه فایل آپلود بالایی ها فالسند این فایل آپلود مرئی ه خط اول نشون داده شه...

میشه راهنماییم کنید چطوری میتونم اینکار رو انجام بدم؟

ممنون

mostafa_sgh
جمعه 01 شهریور 1387, 02:10 صبح
دوست عزیز شما برای اینکار باید با تنظیمات Style مربوط به Table و یا هر چی که ازش استفاده میکنی کار کنی .

به عنوان مثال اگر از Table استفاده میکنی ، نباید برای سطرهاش خصیصه Height تعریف کنی !!!



<table style="width: 552px">
<tr>
<td>
<asp:Label ID="Label1" runat="server" Text="File1"
Visible=false
></asp:Label>
<asp:FileUpload ID="FileUpload1" runat="server"
Visible=false
/></td>
<td>
</tr>
<tr>
<td>
<asp:Label ID="Label2" runat="server" Text="File2"></asp:Label>
<asp:FileUpload ID="FileUpload2" runat="server"/></td>
</tr>
<tr>
<td>
<asp:Label ID="Label3" runat="server" Text="File3"></asp:Label>
<asp:FileUpload ID="FileUpload3" runat="server"/></td>
<td>
</tr>
<tr>
<td>
<asp:Label ID="Label4" runat="server" Text="File4"></asp:Label>
<asp:FileUpload ID="FileUpload4" runat="server"/></td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btnattach" runat="server" Text="Attach"/>&nbsp;
<asp:Button ID="btnback" runat="server" Text="Cancel"/></td>
</tr>
</table>


در ضمن سوالتون مربوط به این تالار نمیشه :چشمک:

Behrouz_Rad
جمعه 01 شهریور 1387, 08:13 صبح
با Attributes.Add، خاصیت display اونها رو none کن.
برای نمایش مجدد، خاصیت display رو inline کن.

موفق باشید.

smrb59
جمعه 01 شهریور 1387, 13:07 عصر
خوب تو pageload صفحه اون کنترلی که میخوایی وقت لود شدن نشون نده میتونی visible اونو برابر false قرار بدی هر جا که نیاز شده برابر true قرار بده.

mostafa_sgh
جمعه 01 شهریور 1387, 14:36 عصر
با Attributes.Add، خاصیت display اونها رو none کن.
برای نمایش مجدد، خاصیت display رو inline کن.


خوب اینطوری باز همون مشکل باقیه ....
(ایشون به احتمال 99.9 % تو کارشون از Table استتفاده کردن )

تا وقتی برای سطر هاشون خصیصه hright وجود داشته باشه ، همون مشکل وجود داره ...

twelve
جمعه 01 شهریور 1387, 15:19 عصر
البته فرمایش آقای راد کاملا درسته ، و با این روش میشه از اشغال فضا جلوگیری کرد
ممکنه المنت ها و پوزیشن اونها در صفحه تابع استایل المنت های پدر باشن مثل همین قضیه Height که دوستمون مطرح کردن که در این صورت صفحه همچنان اشغال میشه

من یه پیشنهاد دارم ، یه جدول با دو سطر درست کنید. سلول سطر اول رو runat=server کنید.(مثلا با آیدی TD1 ). یک کنترل پانل در سطر دوم جدول قرار بدید و همه اون کنترل هایی که قرار هست نامرئی باشن رو در این پانل بذارید (فرقی نمیکنه که visible چی باشه ) بعد توی Page_Load صفحه کنترل های پانل رو پاک کنید و اون کنترلی که قراره نشون داده بشه رو به سلول سرور سایدی که ساختیم اضافه کنید



Panel.Controls.Clear()
TD1.Controls.Add(FileUpload1)


و این ماجرا برای سناریو های مختلف ادامه دارد .... ;-)

h.alizadeh
جمعه 01 شهریور 1387, 22:34 عصر
سلام ممنونم

مشکلم رفع شد ...

ولی این روش رو هم دوست داشتم بهتر متوجه بشم:

با Attributes.Add، خاصیت display اونها رو none کن.
برای نمایش مجدد، خاصیت display رو inline کن.

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


FileUpload1.Attributes.Add("display", "none")
Label1.Attributes.Add("display", "none")

بعد مثلا در رویداد کلیک دکمه م نوشتم:


FileUpload1.Attributes.Add("display", "inline")
Label1.Attributes.Add("display", "inline")
FileUpload1.Visible = True
Label1.Visible = True

نشد یعنی اینجور ی جواب نداد
میشه این روش رو برام توضیح بدید ؟

ممنون

mostafa_sgh
شنبه 02 شهریور 1387, 00:25 صبح
دوست عزیز

خاصیت Display مربوط به Style میشه و نه Attribute !!!

در نتیجه کد های بالا رو اینطوری اصلاح کنید ....


FileUpload1.Style.Add("display", "none")
Label1.Style.Add("display", "none")
.
.
.
FileUpload1.Style.Add("display", "inline")
Label1.Style.Add("display", "inline")
FileUpload1.Visible = True
Label1.Visible = True

Mostafa_Sabeti
شنبه 02 شهریور 1387, 09:44 صبح
به نظر من بهترین کاری که میشه کرد و خودم هم از آن استفاده میکنم اینه که هر کدام از شیء هایت را داخل یک سطر بگذاری و بعد بری داخل سورس و هرکدام از سطرها را runat="server" کنی و یک نام به هر سطر بدهی (با id) و به جای false و true کردن شیء ها، visible سطرها را ترو و فالس کنی

Behrouz_Rad
شنبه 02 شهریور 1387, 11:12 صبح
خاصیت Display مربوط به Style میشه و نه Attribute !!!

ما کاری می کنیم که مال Attributes بشه!!!


FileUpload1.Attributes.Add("style", "display:none;")

h.alizadeh@
البته بهتره کنترلت رو در یک div قرار بدی و display تگ div رو none یا inline کنی.

موفق باشید.

h.alizadeh
شنبه 02 شهریور 1387, 22:05 عصر
ممنونم

میگم تایپیک چطوری تیک سبز به جواب رسیدن بزنم ؟

من جوابم رو گرفتم وهمه ی روشهاتون روهم تست کردم
بازم ممنون