none
C# ile Sudoku Yapımı RRS feed

  • Soru

  • Merhaba arkadaşlar;

    C# ile 9x9 Sudoku yapmam lazım. Algoritma kısmında sorun yaşamadım şuana kadar ama form kısmında sorun yaşadım. Tabloyu yaparken textbox kullanarak yapmayı denedim ama internette araştırdığım kadarıyla DataGridView ile yapmam gerekiyor sanırım. Dataset ile de bağlantı kurmam.

    Bir türlü çıkar yol bulamadım. Nasıl yapsam bu konuda yardımcı olabilecek bir makale yada video öneriniz varsa bekliyorum.

    11 Mayıs 2016 Çarşamba 17:00

Yanıtlar

  • Ne demek nasil atayacagiz? = ile tabii ki. Ornegin:

    void Main()
    {
    	var numbers = new int[9, 9];
    	Form f = new Form {Width = 800, Height=300};
    	
    	for (int row = 0; row < 9; row++)
    	{
    		for (int col = 0; col < 9; col++)
    		{
    			numbers[row, col] = (row+1) * 10 + (col+1);
    			var t = new TextBox();
    			var h = t.Height;
    			
    			t.Dispose();
    			var tb = new TextBox { 
    				Left = col * 20 + 5, Width = 20, 
    				Top = row * (h+1)  + 5, 
    				Tag = row * 100 + col,
    				Text = numbers[row,col].ToString()};
    				
    			tb.TextChanged += (sender, args) => {
    			   var txtB = sender as TextBox;
    			   int v = 0;
    			   var r =  (int)txtB.Tag/100;
    				var c = (int)txtB.Tag % 100;
    				if (!int.TryParse(tb.Text, out v))
    				{
    				   txtB.Text = "";
    				}
    			   numbers[r,c] = v;
    			};
    			f.Controls.Add(tb);
    		}
    	}
    	var b = new Button { Text = "Show array values", Left = 20 * 9 + 15, Top = 10 };
    	var ta = new TextBox
    	{
    		Multiline = true,
    		ReadOnly = true,
    		Top = 50,
    		Left = b.Left,
    		Height = 190,
    		Width = 500,
    		Font = new Font("Courier New",10)};
    
    	b.Click += (sender, args) =>
    	{
    	    StringBuilder sb = new StringBuilder();
    		for (int row = 0; row < 9; row++)
    		{
    			for (int col = 0; col < 9; col++)
    			{
    			   sb.AppendFormat("{0,5}|",numbers[row, col]);
    			}
    			sb.AppendLine();
    		}
    		ta.Text = sb.ToString();
    	};
    	f.Controls.Add(b);
    	f.Controls.Add(ta);
    	f.ShowDialog();
    }
    

    Istersen bindingsource ile ugrasabilirsin ama degmez.

    12 Mayıs 2016 Perşembe 16:44
    Yanıtlayıcı

Tüm Yanıtlar

  • 9*9 sabit girdi icin textbox son derece uygun.
    11 Mayıs 2016 Çarşamba 17:23
    Yanıtlayıcı
  • Textbox'a dizi değerlerini nasıl atayacağız peki?

    Başlangıçta bazı değerlerin gösterilmesi sonrasında kullanıcıdan değerlerin alınmasını içeriyor. 

    11 Mayıs 2016 Çarşamba 20:40
  • Ya tek tek arka tarafta tasarımdaki kutuların referanslarını başka bir diziye atarsın böylece senin dizinin indexleri ile diğer diziyide müdahale edersin.

    Ya da kutuları çalışma zamanında oluşturur, yine benzer bi mantık yürütürsün.

    12 Mayıs 2016 Perşembe 06:21
  • Ne demek nasil atayacagiz? = ile tabii ki. Ornegin:

    void Main()
    {
    	var numbers = new int[9, 9];
    	Form f = new Form {Width = 800, Height=300};
    	
    	for (int row = 0; row < 9; row++)
    	{
    		for (int col = 0; col < 9; col++)
    		{
    			numbers[row, col] = (row+1) * 10 + (col+1);
    			var t = new TextBox();
    			var h = t.Height;
    			
    			t.Dispose();
    			var tb = new TextBox { 
    				Left = col * 20 + 5, Width = 20, 
    				Top = row * (h+1)  + 5, 
    				Tag = row * 100 + col,
    				Text = numbers[row,col].ToString()};
    				
    			tb.TextChanged += (sender, args) => {
    			   var txtB = sender as TextBox;
    			   int v = 0;
    			   var r =  (int)txtB.Tag/100;
    				var c = (int)txtB.Tag % 100;
    				if (!int.TryParse(tb.Text, out v))
    				{
    				   txtB.Text = "";
    				}
    			   numbers[r,c] = v;
    			};
    			f.Controls.Add(tb);
    		}
    	}
    	var b = new Button { Text = "Show array values", Left = 20 * 9 + 15, Top = 10 };
    	var ta = new TextBox
    	{
    		Multiline = true,
    		ReadOnly = true,
    		Top = 50,
    		Left = b.Left,
    		Height = 190,
    		Width = 500,
    		Font = new Font("Courier New",10)};
    
    	b.Click += (sender, args) =>
    	{
    	    StringBuilder sb = new StringBuilder();
    		for (int row = 0; row < 9; row++)
    		{
    			for (int col = 0; col < 9; col++)
    			{
    			   sb.AppendFormat("{0,5}|",numbers[row, col]);
    			}
    			sb.AppendLine();
    		}
    		ta.Text = sb.ToString();
    	};
    	f.Controls.Add(b);
    	f.Controls.Add(ta);
    	f.ShowDialog();
    }
    

    Istersen bindingsource ile ugrasabilirsin ama degmez.

    12 Mayıs 2016 Perşembe 16:44
    Yanıtlayıcı