PDA

View Full Version : AutoScaleMode



prans_tork
سه شنبه 12 خرداد 1394, 22:24 عصر
با سلام
اول بگم که نزدیک 10 روزه همه کارام خوابیده و توی اینترنت کلی دنبال راه حل بودم و نهایتا بعد از سرچ خیلی زیاد، ناچار به ایجاد تاپیک شدم:چشمک:

مشکل: من روی یک پروژه خاصیت AutoScaleMode رو روی Font قرار دادم (البته پیش فرضه) و داخل برنامه یک ریبون برای تنظیمات برنامه و نهایتا یک ComboBox که کاربر بتونه اندازه فونت برنامه رو به میل خودش تغییر بده. البته ComboBox را با چند مقدار پیش فرض پر کردم و کاربر باید از بین اونها انتخاب کنه نه هر اندازه ای. پس نمیتونم از DPI استفاده کنم.
مشکل اینه که وقتی بالاترین سایز برای فونت انتخاب میشه، کنترلها از صفحه خارج میشن.

حالت عادی:
131905

حالت ماکزیمم برای فونت سایز:
131904

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

private void cbFontSize_SelectedIndexChanged(object sender, EventArgs e) {
string SelectedFontSize = cbFontSize.SelectedItem.ToString();
//this.Font = new Font(this.Font.Name, Int32.Parse(SelectedFontSize), FontStyle.Regular, GraphicsUnit.Pixel);
//this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
//this.AutoScaleBaseSize = new Size(5, 13);
switch (SelectedFontSize)
{
case "10":
//this.Font = new System.Drawing.Font(this.Font.Name, Int32.Parse(SelectedFontSize) - 4);
//this.SuspendLayout();
//this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 17F);
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Font = new Font(this.Font.Name, FontSizeDefualt - 1, FontStyle.Regular, GraphicsUnit.Pixel);
//this.ResumeLayout();
break;
case "11":
//this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
//this.SuspendLayout();
//this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 17F);
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Font = new Font(this.Font.Name, FontSizeDefualt, FontStyle.Regular, GraphicsUnit.Pixel);
//this.ResumeLayout();
//new System.Drawing.Font(this.Font.Name, Int32.Parse(SelectedFontSize) - 4);
break;
case "12":
//this.SuspendLayout();
//this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 17F);
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Font = new Font(this.Font.Name, FontSizeDefualt + 1, FontStyle.Regular, GraphicsUnit.Pixel);
//this.ResumeLayout();
//this.Font = new System.Drawing.Font(this.Font.Name, Int32.Parse(SelectedFontSize) - 4);
break;
case "13":
//this.SuspendLayout();
//this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 17F);
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Font = new Font(this.Font.Name, FontSizeDefualt + 2, FontStyle.Regular, GraphicsUnit.Pixel);
//this.ResumeLayout();
//this.Font = new System.Drawing.Font(this.Font.Name, Int32.Parse(SelectedFontSize) - 4);
break;
case "14":
//this.SuspendLayout();
//this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 17F);
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Font = new Font(this.Font.Name, FontSizeDefualt + 3, FontStyle.Regular, GraphicsUnit.Pixel);
//this.ResumeLayout();
//this.Font = new System.Drawing.Font(this.Font.Name, Int32.Parse(SelectedFontSize) - 4);
break;
case "15":
//this.SuspendLayout();
//this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 17F);
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Font = new Font(this.Font.Name, FontSizeDefualt + 4, FontStyle.Regular, GraphicsUnit.Pixel);
//this.ResumeLayout();
//this.Font = new System.Drawing.Font(this.Font.Name, Int32.Parse(SelectedFontSize) - 4);
break;
default:
break;
}
//MessageBox.Show("this MainForm size :" + this.Size.ToString());
//if (Application.OpenForms["FrmTashkPatient"] != null)
//{
// MessageBox.Show("this children size: " + Application.OpenForms["FrmTashkPatient"].Size.ToString());
//}
//MessageBox.Show("this primery screen size: " + Screen.PrimaryScreen.Bounds.Size);
//MessageBox.Show("this primery screen WorkingArea size: " + Screen.PrimaryScreen.WorkingArea.Size);
//MessageBox.Show("this size: " + ribCon.Height);
//MessageBox.Show("this ribon size: " + tabControl1.Size.ToString());
//MessageBox.Show("this clientrectangle size: " + ClientRectangle.Size.ToString());
//MessageBox.Show("this ClientSize Widthsize: " + ClientSize.Width.ToString() + " and Heightsize: " + ClientSize.Height.ToString());
//MessageBox.Show("this tabControl1.ClientSize size: " + tabControl1.ClientSize.ToString());
}

در ضمن از کدهای توضیحی شده مشخصه که کلی با اندازه صفحه و رزولیشن و... ور رفتم تا بنونم حلش کنم اما نشد.
پروژه بر اساس DotNetBar هست و روی VS 2013 و فرم ها داخل تب پنل ادد میشن با کد زیر:

if (Application.OpenForms["FrmTashkPatient"] == null) {



TabItem tabI = new TabItem();
TabControlPanel tbcp = new TabControlPanel();


tbcp.Anchor = AnchorStyles.Top | AnchorStyles.Right;
tbcp.Size = new System.Drawing.Size(pictureBox1.Size.Width, pictureBox1.Size.Height - panelEx1.Height);
tbcp.Location = new Point(tabControl1.Location.X, tabControl1.Location.Y - 26);
tbcp.Dock = DockStyle.Fill;


FrmTashkPatient T1 = new FrmTashkPatient();
T1.AutoScroll = true;
T1.MdiParent = this;
T1.Dock = DockStyle.Fill;
T1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
tbcp.Controls.Add(T1);
tabI.AttachedControl = tbcp;
tabI.Text = T1.TitleText;
tabI.Name = "tabItem" + tabI.Text;
this.tabControl1.Tabs.Add(tabI);
T1.Show();
T1.Focus();
tabControl1.SelectedTab = tabI;


}

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

ebrahim.rayatparvar
چهارشنبه 13 خرداد 1394, 15:23 عصر
سلام مهندس جان.
طراجی خیلی زیبایی داری تبریک می گم.
فقط من نمیدونم داری با چه کامپوننتی کار می کنی ولی من خودم فقط با devexpress کار می کنم اگه devexpress هست میتونی این کار رو بکنی ولی تو کامپوننت دیگه معادلش رو نمی دونم چیه.
فقط کافیه تو برنامه از LayoutControl استفاده کنی و کنترل هایی که داری در صفحه بندازی داخلش قبلش هم LayoutControl رو Dock کن.
معادل این کنترل رو تو کامپوننت های دیگه نمی دونم چی میشه .

prans_tork
چهارشنبه 13 خرداد 1394, 16:23 عصر
سلام مهندس جان.
طراجی خیلی زیبایی داری تبریک می گم.
فقط من نمیدونم داری با چه کامپوننتی کار می کنی ولی من خودم فقط با devexpress کار می کنم اگه devexpress هست میتونی این کار رو بکنی ولی تو کامپوننت دیگه معادلش رو نمی دونم چیه.
فقط کافیه تو برنامه از LayoutControl استفاده کنی و کنترل هایی که داری در صفحه بندازی داخلش قبلش هم LayoutControl رو Dock کن.
معادل این کنترل رو تو کامپوننت های دیگه نمی دونم چی میشه .

ممنون از توجهت مهندس

من با مجموعه DotNetBar از مجموعه کامپوننت DevComponent کار کردم این پروژه رو.
اما داخل این مجموعه و یا حتی خوده .Net کنترل گفته شده شما رو (
LayoutControl
)پیدا نکردم.


به هرحال از توجهت ممنونم و منتظر راهنمایی شما دوستان.

prans_tork
شنبه 23 خرداد 1394, 14:36 عصر
ممنونم از دوستان
با کنترل layoutControl و کمی تلاش حل شد مشکل.
از دوست خوبم ebrahim.rayatparvar (http://barnamenevis.org/member.php?312504-ebrahim-rayatparvar) هم ممنونم بابت راهنمایی