prans_tork
سه شنبه 12 خرداد 1394, 23: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;
}
از راهنمایی دوستان و مهندسین عزیز ممنونم
اول بگم که نزدیک 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;
}
از راهنمایی دوستان و مهندسین عزیز ممنونم