PDA

View Full Version : سوال: چینش خودکار باتون ها



mahmooddavoodi
دوشنبه 27 بهمن 1393, 11:21 صبح
با سلام خدمت همه دوستان و اساتید گرامی؛ صمیمانه از همگی تشکر می کنم بنده شخصا از مطالب این سایت بسیار بهره مند شدم.
سوالی که در حال حاضر دارم این است که: چون دسترسی کاربرهای مختلف به باتون های موجود درفرم متفاوت است . راه حلی بفرمایید که پس از مخفی شدن یک باتون برای یک کاربر، باتون بعدی جای خود را عوض کند و جانشین باتون حذف شده گردد تا فضای خالی میان باتون ها نباشد..بعضی از دوستان در حالت فوق باتون های محدود شده را غیرفعال می کنند ولی منظور من این نیست. با تشکر فراوان

amp_1356
دوشنبه 27 بهمن 1393, 11:35 صبح
سلام. یه راه که به ذهن من می رسه اینه که دکمه های کناری رو مخفی کنید و برای دکمه هایی که کنار هم هستند برای هر کاربر یا در هر مرحله Caption دکمه هایی که کنار هم باقی می مانند رو با کد نویسی تغییر بدید و دستوراتی که در رویداد هر دکمه قرار داره رو با دستور If کنترل کنید.
موفق باشید

mahmooddavoodi
سه شنبه 28 بهمن 1393, 07:11 صبح
سلام. یه راه که به ذهن من می رسه اینه که دکمه های کناری رو مخفی کنید و برای دکمه هایی که کنار هم هستند برای هر کاربر یا در هر مرحله Caption دکمه هایی که کنار هم باقی می مانند رو با کد نویسی تغییر بدید و دستوراتی که در رویداد هر دکمه قرار داره رو با دستور If کنترل کنید.
موفق باشید

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

mrsp1988
سه شنبه 28 بهمن 1393, 08:09 صبح
بستگی به نحوه قرار گرفتن باتون ها شما باشد اگر بگویید من شاید بتوانم راهنمایی کنم .
در یک ردیف و ستون قراردارند یا در چند ردیف و ستون

mrsp1988
سه شنبه 28 بهمن 1393, 08:51 صبح
Dim intTop As Integer
Dim intLeft As Integer

intTop = 100
intLeft = 100

For i = 0 To 12
If Me.Controls("Command" & i).Visible = True Then
Me.Controls("Command" & i).Top = intTop
Me.Controls("Command" & i).Left = intLeft
intTop = 100 + Me.Controls("Command" & i).Height + intTop
End If
If i = 6 Then
intTop = 100
intLeft = intLeft + 100 + Me.Controls("Command" & i).Width
End If
Next i

mahmooddavoodi
سه شنبه 28 بهمن 1393, 11:30 صبح
بستگی به نحوه قرار گرفتن باتون ها شما باشد اگر بگویید من شاید بتوانم راهنمایی کنم .
در یک ردیف و ستون قراردارند یا در چند ردیف و ستون

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

mrsp1988
چهارشنبه 29 بهمن 1393, 10:08 صبح
خواهش می کنم
این هم نمونه

mahmooddavoodi
چهارشنبه 29 بهمن 1393, 12:40 عصر
مجدد تشکر می کنم از زحمتتون.. در نوشته قبلی عرض کردم باتون ها در یک ردیف هستند شما زحمت حالت ستونی را کشیدید. با عرض معذرت اگر حالت افقی را هم نمونه بدهید ممنون میشم.به این صورت که از سمت چپ، باتون ها جابه جا می شوند یعنی باتون سمت راست ثابت است ولی تغییرات در سمت چپ صورت می گیرد.بی نهایت ممنون

mrsp1988
چهارشنبه 29 بهمن 1393, 13:33 عصر
اینم نمونه دیگری که درخواست داشتی

mahmooddavoodi
چهارشنبه 29 بهمن 1393, 13:52 عصر
مجدد تشکر می کنم از راهنماییتون..این نمونه خیلی عالی که شما زحمت کشیدی از چپ به راست می چینه اونی که من لازم دارم از راست به چپ باید باشه..باز هم ممنون.امیدوارم آخرین زحمت من به شما باشه

mrsp1988
چهارشنبه 29 بهمن 1393, 14:31 عصر
این کد رو جای کد قبلی بزار



Dim intTop As Integer
Dim intLeft As Integer

On Error GoTo Err
intTop = 100
intLeft = Me.Width - 100

For i = 0 To 20
If Me.Controls("Command" & i).Visible = True Then
intLeft = intLeft - 100 - Me.Controls("Command" & i).Width '-
Me.Controls("Command" & i).Left = intLeft
Me.Controls("Command" & i).Top = intTop
Me.Controls("Command" & i).Caption = i
End If
Next i
Exit Sub

Err:
If Err.Number = 2100 Then MsgBox"تعداد باتون ها بیشتر از عرض فرم می باشد.", vbCritical + vbMsgBoxRight

mrsp1988
چهارشنبه 29 بهمن 1393, 14:34 عصر
این کد رو جای کد قبلی بزار



Dim intTop As Integer
Dim intLeft As Integer

On Error GoTo Err
intTop = 100
intLeft = Me.Width - 100

For i = 0 To 20
If Me.Controls("Command" & i).Visible = True Then
intLeft = intLeft - 100 - Me.Controls("Command" & i).Width '-
Me.Controls("Command" & i).Left = intLeft
Me.Controls("Command" & i).Top = intTop
Me.Controls("Command" & i).Caption = i
End If
Next i
Exit Sub

Err:
If Err.Number = 2100 Then MsgBox"تعداد باتون ها بیشتر از عرض فرم می باشد.", vbCritical + vbMsgBoxRight

mahmooddavoodi
چهارشنبه 29 بهمن 1393, 15:37 عصر
mrsp1988 عزیز هیچ واژه ای بهتر از تشکر پیدا نکردم..متشکرم به کمک شما حل شد.:تشویق:

mrsp1988
چهارشنبه 29 بهمن 1393, 16:03 عصر
خواهش میکنم