C# Mengubah Ukuran teks tombol

Saya ingin Ukuran font Tombol berubah secara dinamis, ketika saya mengubah ukuran Tombol. Sejauh ini saya telah menempatkan tombol di Lokasi yang tepat dan Ukuran Tombol berubah, ketika saya mengubah ukuran Formulir. Namun ketika Tombol menjadi terlalu kecil untuk teks di Tombol, huruf-hurufnya 'jatuh' begitu saja.

Bagaimana cara mengubah Ukuran teks Tombol tergantung pada ukuran Tombol itu sendiri?


person Stujo    schedule 26.10.2016    source sumber
comment
WinForms minta maaf untuk itu...   -  person Stujo    schedule 26.10.2016


Jawaban (4)


Untuk membuat teks di tombol responsif gunakan kode berikut:

    //paint event from button:
    private void button1_Paint(object sender, PaintEventArgs e)
    {
        float fontSize = NewFontSize(e.Graphics, button1.Size, button1.Font, button1.Text);

        // set font with Font Class and the returned Size from NewFontSize();
        Font f = new Font("Arial", fontSize, FontStyle.Bold);
        button1.Font = f;
    }

    // method to calculate the size for the font:
    public static float NewFontSize(Graphics graphics, Size size, Font font, string str)
    {
        SizeF stringSize = graphics.MeasureString(str, font);
        float wRatio = size.Width / stringSize.Width;
        float hRatio = size.Height / stringSize.Height;
        float ratio = Math.Min(hRatio, wRatio);
        return font.Size * ratio;
    }

Contoh penerapan kode:

Contoh kode yang sedang beraksi

Seperti yang Anda lihat, font akan diubah ukurannya di dalam tombol. Dan teks tidak akan terlempar keluar dari tombol. Anda juga dapat menggunakan ini untuk Pengendali lainnya.

person Timon Post    schedule 26.10.2016
comment
Dan bagaimana cara mengubahnya secara dinamis dengan ukuran tombol? - person Stujo; 26.10.2016
comment
Saya telah mengubah posting saya dan saya menemukan cara untuk mencapai ini. @Stujo - person Timon Post; 26.10.2016

Karena Anda tidak memberikan detail mengenai font, ukuran, dan apa yang tidak, saya akan memberikan cuplikan umum hanya untuk mengarahkan Anda ke arah yang benar. Silakan ubah parameternya sesuai kebutuhan Anda.

Button button = (Button)sender;
button.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

Atau bahkan sesuatu yang lebih sederhana

button.Font = new Font("Microsoft Sans Serif", 10);
person Vadzim Savenok    schedule 26.10.2016
comment
Dan bagaimana cara mengubahnya secara dinamis dengan ukuran tombol? - person Stujo; 26.10.2016
comment
button.Font = new Font(button.Font.FontFamily, button.Font.Size*1.1f);? Dengan atau tanpa bagian *1.1f?... - person Vadzim Savenok; 26.10.2016

Anda ingin memeriksa berapa tinggi dan lebar yang Anda miliki untuk tombol tersebut terlebih dahulu.

Kemudian kodekan satu loop pada font 1pt menjadi sekitar 200

di setiap loop, panggil TextRenderer.MeasureText(button.text, button.font); berikan font yang sama tetapi dengan ukuran titik dari loop.

Kemudian verifikasi apakah tinggi dan lebar dari MeasureText sesuai dengan batas tombol yang Anda berikan sendiri. Jika cocok coba ukuran berikutnya yang lebih tinggi. Jika kurang pas, ukuran font terbaiknya jika yang sebelumnya.

person Franck    schedule 26.10.2016
comment
Dan bagaimana cara mengubahnya secara dinamis dengan ukuran tombol? - person Stujo; 26.10.2016
comment
ikat ke peristiwa tombol untuk memicu kode ini seperti peristiwa SizeChanged - person Franck; 26.10.2016

Untuk perubahan dinamis, saya akan mencoba sesuatu seperti ini. Tapi itu hanya menyelesaikan perubahan dinamis. Untuk memeriksa lebar teks, Anda perlu menerapkan beberapa fungsi lagi pada kode ini.

    public class MyButton : Button
{
    public MyButton()
    {

    }

    public override bool AutoSize {
        get {
            return false;
        }
        set {
            base.AutoSize = false;
        }
    }

    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);

        Font = new Font(this.Font.FontFamily,Height-10,this.Font.Style,GraphicsUnit.Pixel);

    }
}
person OndrejMikulec    schedule 27.10.2016