none
C sharp yaptığım uygulama form boyutları ne olmalı. Tüm bilgisayar çözünürlüklerinde çalışabilmesi için RRS feed

  • Soru

  • Arkadaşlar merhaba,

    Yapmış olduğum uygulama tam ekranda çalışması gerekiyor form boyutları da benim bilgisayarımın çözünürlüklerine göre ayarlı tabiiki de doğal olarak çözünürlkte bir sıkıntı yok ama başka pclerde sıkıntı çıkıyor bunu nasıl düzeltebilirim.

    4 Ağustos 2016 Perşembe 15:12

Yanıtlar

  • Bence bunun en doğru olabilecek şekli projen bitince hazırlamış olduğun form'da bütün nesnelerin boylarının, enlerinin ve konumlarının form büyüklüğüne göre yüzdelerini alman. Bü yüzdeleri aldıkdan sonra form açılırken aktif olan formun büyüklüğüne göre bu yüzdeleri konumlara enlere ve boyalra uygula.

    Elinde bu yüzdeler oldukdan sonra istediğin çözünürlükde aç önemli değil çünkü matematik yanılmaz.

    Mesela bu yöntem ile yaptığım şu uygulama bir bakın Farklı çözünürlükdeki ekran fotoları: 

    düşük

    Bir sonraki:

    orta

    Bir sonraki:

    Yüksek

    Gördüğünüz üzere hepsi birebir gerçek ölçüleri ile aynı görünüyor. Form'un maximize özelliğinin true olması da hiç önemli değil:

    maximize



    5 Ağustos 2016 Cuma 00:03

Tüm Yanıtlar

  • Deleted
    4 Ağustos 2016 Perşembe 17:18
  • Sizin dediğiniz gibi yaptım maximizedbox = false yaptım sonra bilgisayardan çözünürlüğü değiştirip denedim yine aynı sonuç.
    4 Ağustos 2016 Perşembe 17:48
  • Bence bunun en doğru olabilecek şekli projen bitince hazırlamış olduğun form'da bütün nesnelerin boylarının, enlerinin ve konumlarının form büyüklüğüne göre yüzdelerini alman. Bü yüzdeleri aldıkdan sonra form açılırken aktif olan formun büyüklüğüne göre bu yüzdeleri konumlara enlere ve boyalra uygula.

    Elinde bu yüzdeler oldukdan sonra istediğin çözünürlükde aç önemli değil çünkü matematik yanılmaz.

    Mesela bu yöntem ile yaptığım şu uygulama bir bakın Farklı çözünürlükdeki ekran fotoları: 

    düşük

    Bir sonraki:

    orta

    Bir sonraki:

    Yüksek

    Gördüğünüz üzere hepsi birebir gerçek ölçüleri ile aynı görünüyor. Form'un maximize özelliğinin true olması da hiç önemli değil:

    maximize



    5 Ağustos 2016 Cuma 00:03
  • Descop :)

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    5 Ağustos 2016 Cuma 05:48
    Moderatör
  • Özcan bey yaptığınız örnek uygulamayı bizlerle paylaşabilirmisiniz? yada videolu anlatımı mevcutsa link verebilirseniz çok memnun olurum.)
    5 Ağustos 2016 Cuma 06:52
  • Descop :)

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    Haha :D gereksiz dosyaları koyuyorum :D

    Özcan bey yaptığınız örnek uygulamayı bizlerle paylaşabilirmisiniz? yada videolu anlatımı mevcutsa link verebilirseniz çok memnun olurum.)

    Tabi paylaşırım ne demek Buyrun video gerekecek kadar karmaşık değil. Lınkden source dosyalarını indirebilirsiniz.

    hepsi burda: LINK 

    Kodlarım da şöyle:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    
    namespace Cozunurluge_gore_form
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            bool bir_kere = true;
            bool bir_kere_daha = true;
    
            void konumlari_ayala()
            {
                timer1.Enabled = false;
                this.Show();
                this.Refresh();
            }
    
            private void Form1_Activated(object sender, EventArgs e)
            {
                if (bir_kere == true)
                {
                    ayarla();  
                    bir_kere = false;
                }
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                konumlari_ayala();
            }
    
            private void Form1_SizeChanged(object sender, EventArgs e)
            {
                if (bir_kere_daha == false)
                {
                    ayarla();
                }
                bir_kere_daha = false;
            }
            void ayarla()
            {
                panel1.Location = new Point(Form1.ActiveForm.Size.Width / 100, Form1.ActiveForm.Size.Height * 3 / 100);
                panel1.Size = new Size(Form1.ActiveForm.Size.Width * 45 / 100, Form1.ActiveForm.Size.Height * 60 / 100);
    
                pictureBox2.Location = new Point(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 3 / 100);
                pictureBox2.Size = new Size(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 28 / 100);
    
                panel2.Location = new Point(Form1.ActiveForm.Size.Width / 100, Form1.ActiveForm.Size.Height * 64 / 100);
                panel2.Size = new Size(Form1.ActiveForm.Size.Width * 45 / 100, Form1.ActiveForm.Size.Height * 24 / 100);
    
                button1.Location = new Point(Form1.ActiveForm.Size.Width * 7 / 100, Form1.ActiveForm.Size.Height * 6 / 100);
                button1.Size = new Size(Form1.ActiveForm.Size.Width * 32 / 100, Form1.ActiveForm.Size.Height * 12 / 100);
    
                button3.Location = new Point(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 51 / 100);
                button3.Size = new Size(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 36 / 100);
    
                panel3.Location = new Point(Form1.ActiveForm.Size.Width * 49 / 100, Form1.ActiveForm.Size.Height * 5 / 100);
                panel3.Size = new Size(Form1.ActiveForm.Size.Width * 45 / 100, Form1.ActiveForm.Size.Height * 24 / 100);
    
                button2.Location = new Point(Form1.ActiveForm.Size.Width * 7 / 100, Form1.ActiveForm.Size.Height * 6 / 100);
                button2.Size = new Size(Form1.ActiveForm.Size.Width * 32 / 100, Form1.ActiveForm.Size.Height * 12 / 100);
    
                richTextBox1.Location = new Point(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 32 / 100);
                richTextBox1.Size = new Size(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 18 / 100);       
            }
        }
    }

    Formdan Bir görüntü:

    Form1

    Yüzdelik bilgileri nerden aulduğumu merak ederseniz programım bittiğinde en son programda kullandığım itemlerin location'larını ve sizelerini bir dosyaya kaydetdirdim sonra bu parçayı çıkartıyorsunuz programınızdan. burda önemli olan form'un size sini almak properties kısmındaki form size'yi kullanmayın programa kaydettirin benim kaydettirdiğim verilerin ekran görüntüsü şöyle:

    Bilgiler

    yanda yazan yüzdeleri kendim elle hesapladım programa sadece location'ları ve size'leri yazdırıyrum bunları hesaplamak da 1 ssatimi almadı çok uzun bi işlem gibi göründüğüne bakmayın bi hesap makinesi ile çok rahat yapabiliyorsunuz.


    5 Ağustos 2016 Cuma 17:38
  • WPF de grid kullanıyorsun zaten hepsini yapıyor. Seçim sizin.
    5 Ağustos 2016 Cuma 18:07
  • WPF ile hiç uğraşmadım hiç de bilmiyorum :) Özcan bey sizde çok çok sağolun daha denemedim ama bi bakalım işime yarıyacak gibi tekrardan teşekkürler.
    6 Ağustos 2016 Cumartesi 14:54
  • Özcan bey şu yüzde olayını anlamadım nasıl hesaplayacağım? Söyleyebilirmisiniz
    6 Ağustos 2016 Cumartesi 17:10
  • Özcan bey şu yüzde olayını anlamadım nasıl hesaplayacağım? Söyleyebilirmisiniz

    Mesela elimizde bir program var biz programımıza geçici bir buton ekliyoruz ve butonun click olayına aşşağıdaki kodları yazıyoruz:

    private void button1_Click(object sender, EventArgs e)
            {
                this.Show();
                this.Refresh();
    
                StreamWriter sw = new StreamWriter(@"C:\deneme\Bilgiler.txt");
    
                sw.WriteLine("Panel1 Location-> x%: " + ((panel1.Location.X * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((panel1.Location.Y * 100 / Form1.ActiveForm.Height)).ToString());
                sw.WriteLine("Panel1 Size-> x%: " + ((panel1.Width * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((panel1.Height * 100 / Form1.ActiveForm.Height)).ToString());
    
                sw.WriteLine("Panel2 Location-> x%: " + ((panel2.Location.X * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((panel2.Location.Y * 100 / Form1.ActiveForm.Height)).ToString());
                sw.WriteLine("Panel2 Size-> x%: " + ((panel2.Width * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((panel2.Height * 100 / Form1.ActiveForm.Height)).ToString());
    
                sw.WriteLine("picturebx1 Location-> x%: " + ((pictureBox1.Location.X * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((pictureBox1.Location.Y * 100 / Form1.ActiveForm.Height)).ToString());
                sw.WriteLine("picturebx1 Size-> x% " + ((pictureBox1.Width * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((pictureBox1.Height *100/ Form1.ActiveForm.Height)).ToString());
    
                sw.WriteLine("btn1 Location-> x%: " + ((button1.Location.X * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((button1.Location.Y * 100 / Form1.ActiveForm.Height)).ToString());
                sw.WriteLine("btn1 Size-> x%: " + ((button1.Width * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((button1.Height * 100 / Form1.ActiveForm.Height)).ToString());
    
                sw.WriteLine("btn2 Location-> x%: " + ((button2.Location.X * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((button2.Location.Y * 100 / Form1.ActiveForm.Height)).ToString());
                sw.WriteLine("btn2 Size-> x%: " + ((button2.Width * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((button2.Height * 100 / Form1.ActiveForm.Height)).ToString());
    
                sw.WriteLine("prgrssbr1 Location-> x%: " + ((progressBar1.Location.X * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((progressBar1.Location.Y * 100 / Form1.ActiveForm.Height)).ToString());
                sw.WriteLine("prgrssbr1 Size-> x%: " + ((progressBar1.Width * 100 / Form1.ActiveForm.Width)).ToString() + "  y%: " + ((progressBar1.Height * 100 / Form1.ActiveForm.Height)).ToString());            
    
                sw.Close();
            }

    Sonra programımızı çalıştırdak sonra C:\deneme\bilgiler.txt dosyasının içerisine kaydedilmiş verilerilerimize bakıyoruz mesela bende:

    bilgiler

    şeklinde yazıyor bu değerler bizim itemlerimizin yüzde olarak formun neresinde yada ne kadar yer kapladıkları mesela en ben yukarda (05 Ağustos 2016 Cuma 17:38)'da verdiim cevapda:

    void ayarla()
    {   
            pictureBox2.Location = new Point(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 3 / 100);
            pictureBox2.Size = new Size(Form1.ActiveForm.Size.Width * 48 / 100, Form1.ActiveForm.Size.Height * 28 / 100);
    }

    şeklinde yazamamın sebebi o formda hesapladığımda picturebox2 location olarak formun %48 indeymiş bende form'un size changed olayına yazdığım kodla diyorum ki form büyüklüğü ne ise benim picturebox'um bu formun büyüklüğünün %48'inde olacak aynı şekilde mesela picturebox'un y deki size %28 miş bunun anlamı formun y eksenindeki uzunluğunun %28 ini kaplıyor. bende formun yine size changed ine formun size ne ise picturebox2'nin y deki uzunluğu formun uzunluğunun %28'i olsun diyorum.. yani bunlar bu anlama geliyor.  bu işlemi bir kere yapıp formdaki itemlerinizin yerlerinin yüzde karşılıklarını buldukdan sonra o eklediğiniz butonu silebilirsiniz.  (bu yöntem ile yüzdeleri el ile hesaplamaya gerek kalmadı bu da bu gün aklıma eldi çok büyük kolaylık oldu)

    inşallah açıklayıcı olmuşumdur.



    6 Ağustos 2016 Cumartesi 22:03
  • Özcan Bey, ne kadar yararınız dokundu anlatamam. Sadece bana da  değil bütün programcıların karşılaşacağı bir sorunun cevabını verdiniz. Umarım herkese faydalı olur. Tekrardan Teşekkürler.
    7 Ağustos 2016 Pazar 07:19
  • Benim önerim, asla çalışma zamanında oluşturduğun nesnelerin haricinde kalanların boyutunu kodla belirlememen. 

    WPF kullanmıyorsan bile TableLayout gibi gibi oranlı nesneler Winforms için de var. 






    7 Ağustos 2016 Pazar 07:32
  • Rica ederim Cihan Abinin de söylediklerini dikkate almalısınız o daha tecrübbeli bu konularda.
    7 Ağustos 2016 Pazar 12:25