C# Console ile menü çalışması nasıl yapabilirim ?

thekilic

Yeni üye
26 Mar 2023
26
2
Son Görünüm :

Geçen ki günden sonra sadece söylenilen yol üzerinde tekrardan sil baştan araştırma ve denemeler yaptım. Son hali ise yukarıda. Sanırım eksik oldu gibi ve çok düzensizleşti.
Nasıl düzeltebilirim ?
Ayrıca menüler arasında satır boşlukları bırakmak ve tek hizada olmasını sağlayamadım.
Nasıl sağlayabilirim ?
Vede bir şey fark ettim menülerin yan yana olması için "console.writeLine" olarak tanımlamıştım fakat konum için tanımladığım bu kodlardan sonra alt alt olacak şekilde bir düzen aldı.
Yardımcı olabilirmisiniz lütfen ?

Menü için yazdığım tüm kodlar :
public static void notlar()
{
Console.Title = "N O T L A R I M";
Console.OutputEncoding = Encoding.GetEncoding("ibm857");




//Dizi tanımlama işlemi ile menü oluşturmak
string[] dizi_menuler = new string[] { "C # CONSOLE KODLAMA \t", "C # NESNEL KODLAMA \t", "Çıkış" };
Console.WriteLine(dizi_menuler[0]);

Console.WriteLine(dizi_menuler[1]);

Console.WriteLine(dizi_menuler[2]);


foreach (string menu in dizi_menuler)
{


//Dizi tanımlayarak oluşturulan "dizi_menü"'nü , List<>' te aktaralım.
List<string> list_menuler = new List<string>(dizi_menuler);

Console.CursorVisible = false;//Aktif olan imlecin görünüz özelliğini kapat. Böylece imleç gizli kalacaktır.


while (true)/*Bu döngü ile döngü şartlarının doğru olup olmadığını kontrol etmeden döngünün çalıştırılamsına
izin verir ve döngü şatları uyumlu olduğu sürece çalışır */
{

Console.Clear();
/*Eğer ki burada ki sayfa temizleme komutu aktif olur ise tıklama sonucunda açılacak olan sayfalarında görüntülenmesini engeller*/




string secili_oge;
secili_oge = menuler(list_menuler);


if (secili_oge == "C # CONSOLE KODLAMA")
{


Konu_Console.Console_dersi();
}
else if (secili_oge == "C # NESNEL KODLAMA")
{
// Console.Clear();
Konu_Nesnel.Nesnel_dersi();
}
else if (secili_oge == "Çıkış")
{
Environment.Exit(0);
}
}

}
}
private static string menuler(List<string> list_menu)
{


for (int i = 0; i < list_menu.Count; i++)
{

//---------------------------------------------------------------------------------------------
//--------------------- SAYFADA YER ALAN MENÜLERİN KONUMLARINI AYARLAR-------------------------


Console.CursorTop = i + 5;
Console.CursorLeft = i + 5;
//-----------------------------------------OR

// Console.SetCursorPosition(i + 5, i + 5);
//-----------------------------------------------------------------------------------
if (i == index)
{

Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.Green;

Console.WriteLine(list_menu);

}
else
{
Console.WriteLine(list_menu);
}
Console.ResetColor();
}

ConsoleKeyInfo basilantus;
basilantus = Console.ReadKey();

if (basilantus.Key == ConsoleKey.UpArrow)
{
if (index <= 0)
{

}
else
{
index--;
}
}
else if (basilantus.Key == ConsoleKey.DownArrow)
{
if (index == list_menu.Count - 1)
{

}
else
{
index++;
}
}
else if (basilantus.Key == ConsoleKey.Enter)
{
return list_menu[index];
}
else if (basilantus.Key != ConsoleKey.RightArrow || basilantus.Key != ConsoleKey.LeftArrow || basilantus.Key != ConsoleKey.Enter)
{//Kullanıcı basılması istenen tuşlar dışında işlem yapmasını engel olmak ya da programın hata vermesini önlemek.
Console.WriteLine("Hatalı bir tıklama işlemi !!!");
}
else
{
return "";
}
Console.Clear();
return "";
}

}
}
 

Enistein

Kıdemli Üye
16 Eyl 2012
2,233
1,258
Amsterdam
Son Görünüm :

Geçen ki günden sonra sadece söylenilen yol üzerinde tekrardan sil baştan araştırma ve denemeler yaptım. Son hali ise yukarıda. Sanırım eksik oldu gibi ve çok düzensizleşti.
Nasıl düzeltebilirim ?
Ayrıca menüler arasında satır boşlukları bırakmak ve tek hizada olmasını sağlayamadım.
Nasıl sağlayabilirim ?
Vede bir şey fark ettim menülerin yan yana olması için "console.writeLine" olarak tanımlamıştım fakat konum için tanımladığım bu kodlardan sonra alt alt olacak şekilde bir düzen aldı.
Yardımcı olabilirmisiniz lütfen ?

Menü için yazdığım tüm kodlar :
public static void notlar()
{
Console.Title = "N O T L A R I M";
Console.OutputEncoding = Encoding.GetEncoding("ibm857");




//Dizi tanımlama işlemi ile menü oluşturmak
string[] dizi_menuler = new string[] { "C # CONSOLE KODLAMA \t", "C # NESNEL KODLAMA \t", "Çıkış" };
Console.WriteLine(dizi_menuler[0]);

Console.WriteLine(dizi_menuler[1]);

Console.WriteLine(dizi_menuler[2]);


foreach (string menu in dizi_menuler)
{


//Dizi tanımlayarak oluşturulan "dizi_menü"'nü , List<>' te aktaralım.
List<string> list_menuler = new List<string>(dizi_menuler);

Console.CursorVisible = false;//Aktif olan imlecin görünüz özelliğini kapat. Böylece imleç gizli kalacaktır.


while (true)/*Bu döngü ile döngü şartlarının doğru olup olmadığını kontrol etmeden döngünün çalıştırılamsına
izin verir ve döngü şatları uyumlu olduğu sürece çalışır */
{

Console.Clear();
/*Eğer ki burada ki sayfa temizleme komutu aktif olur ise tıklama sonucunda açılacak olan sayfalarında görüntülenmesini engeller*/




string secili_oge;
secili_oge = menuler(list_menuler);


if (secili_oge == "C # CONSOLE KODLAMA")
{


Konu_Console.Console_dersi();
}
else if (secili_oge == "C # NESNEL KODLAMA")
{
// Console.Clear();
Konu_Nesnel.Nesnel_dersi();
}
else if (secili_oge == "Çıkış")
{
Environment.Exit(0);
}
}

}
}
private static string menuler(List<string> list_menu)
{


for (int i = 0; i < list_menu.Count; i++)
{

//---------------------------------------------------------------------------------------------
//--------------------- SAYFADA YER ALAN MENÜLERİN KONUMLARINI AYARLAR-------------------------


Console.CursorTop = i + 5;
Console.CursorLeft = i + 5;
//-----------------------------------------OR

// Console.SetCursorPosition(i + 5, i + 5);
//-----------------------------------------------------------------------------------
if (i == index)
{

Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.Green;

Console.WriteLine(list_menu);

}
else
{
Console.WriteLine(list_menu);
}
Console.ResetColor();
}

ConsoleKeyInfo basilantus;
basilantus = Console.ReadKey();

if (basilantus.Key == ConsoleKey.UpArrow)
{
if (index <= 0)
{

}
else
{
index--;
}
}
else if (basilantus.Key == ConsoleKey.DownArrow)
{
if (index == list_menu.Count - 1)
{

}
else
{
index++;
}
}
else if (basilantus.Key == ConsoleKey.Enter)
{
return list_menu[index];
}
else if (basilantus.Key != ConsoleKey.RightArrow || basilantus.Key != ConsoleKey.LeftArrow || basilantus.Key != ConsoleKey.Enter)
{//Kullanıcı basılması istenen tuşlar dışında işlem yapmasını engel olmak ya da programın hata vermesini önlemek.
Console.WriteLine("Hatalı bir tıklama işlemi !!!");
}
else
{
return "";
}
Console.Clear();
return "";
}

}
}
Merhaba,

Menüleri tek hizada görüntülemek için Console.WriteLine yerine Console.Write kullanabilirsiniz. Console.Write satır sonuna \t karakteri eklemeye gerek kalmadan, metinleri yan yana yazdırır.

Menülerin alt alta yerleştirilmesi, foreach döngüsü içinde olmasından kaynaklanıyor. Döngü dışına taşıyarak düzeltebilirsiniz.

Console.SetCursorPosition fonksiyonu kullanarak yazdırma konumunu ayarlayabilirsiniz.

İyi çalışmalar!
 

thekilic

Yeni üye
26 Mar 2023
26
2
Merhaba,

Menüleri tek hizada görüntülemek için Console.WriteLine yerine Console.Write kullanabilirsiniz. Console.Write satır sonuna \t karakteri eklemeye gerek kalmadan, metinleri yan yana yazdırır.

Menülerin alt alta yerleştirilmesi, foreach döngüsü içinde olmasından kaynaklanıyor. Döngü dışına taşıyarak düzeltebilirsiniz.

Console.SetCursorPosition fonksiyonu kullanarak yazdırma konumunu ayarlayabilirsiniz.

İyi çalışmalar!
Kod:
[CODE=csharp]/*Evet dediğiniz çalışmaları doğru anladı isem uyguladım.
* console.write("");
kullandım,
* foreach
{

}
kullanmadım ve
*   Console.SetCursorPosition(i + 10 , i + 15);
komutunu kullandım ama bir çözüme ulaşamadım.

Yeni bir çalışma kod ÖRNEĞİ :*/

class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Çalışma";
            Console.OutputEncoding = Encoding.GetEncoding("ibm857");
   
         //Menuler için tanımlanan Dizi ve List<> dizi menüleri.
            string[] dizi_menu/*Dizi adı*/ = new string[] { "C # CONSOLE KODLAMA", "C# NESNE Tanımlama", "Çıkış" };

                             List<string> listmenu_1/*List<> dizi adı*/ = new List<string>(dizi_menu/*Dizi adının çağrılması*/);
                             //Menü için tanımlanan dizi'nin bir List<> dizi haline dönüştürlme işlemi
 
            List<string> listmenu_2 = new List<string>
             {
             "C # CONSOLE KODLAMA",
             "C # NESNEL  KODLAMA",
             "Çıkış"
             };
    
            Console.CursorVisible = false;
            while (true)
            {
                Console.Clear();
                       string secili_oge_1;
                secili_oge_1 = Menu.dropmenu_1(listmenu_1);

                if (secili_oge_1 == "C # CONSOLE KODLAMA")
               {
                    Console.Clear();
               }
                else if (secili_oge_1 == "C # NESNEL  KODLAMA")
                {
                    Console.Clear();
                }
                else if (secili_oge_1 == "Çıkış")
               {
                    Environment.Exit(0);
               }
            }
       }
    }
}
//Yeni bir CLASS sayfasında ki kodlara Erişim sağlıyorum.********************************************************************

class Menu
   {
        static int index = 0;//Ana sınıf alanı içerisinde "index" adında ikinci bir Metod oluşturuldu
        public static string dropmenu_1(List<string> listmenu_1)
        {
            for (int i = 0; i < listmenu_1.Count; i++)
            {
                Console.SetCursorPosition(i + 10 , i + 15);

                if (i == index)
                {
                    Console.BackgroundColor = ConsoleColor.Blue;
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Write(listmenu_1);
                }
                else
                {
                    Console.Write(listmenu_1);
                }
                Console.ResetColor();
                }
            ConsoleKeyInfo basilan_tus;
            basilan_tus = Console.ReadKey();

            if (basilan_tus.Key == ConsoleKey.LeftArrow)
            {
                if (index <= 0)
                {
                }
                else
                {
                    index--;
                }
            }
            else if (basilan_tus.Key == ConsoleKey.RightArrow)
            {
                if (index == listmenu_1.Count - 1)
                {
                }
                else
                {
                   index++;
                }
            }
            else if (basilan_tus.Key == ConsoleKey.Enter)
           {
                return listmenu_1[index];
            }
            else if (basilan_tus.Key != ConsoleKey.RightArrow || basilan_tus.Key != ConsoleKey.LeftArrow || basilan_tus.Key != ConsoleKey.Enter)
            {
                //  Console.WriteLine("Hatalı bir tıklama işlemi !!!");
            }
            else
            {
                return "";
            }
            Console.Clear();
            return "";
        }
    }
}
 
Son düzenleme:

Grimner

Adanmış Üye
28 Mar 2020
6,325
4,806
Evet dediğiniz çalışmaları doğru anladı isem uyguladım.
* console.write("");
kullandım,
* foreach
{
}
kullanmadım ve
* Console.SetCursorPosition(i + 10 , i + 15);
komutunu kullandım ama bir çözüme ulaşamadım.
Yeni bir çalışma kod ÖRNEĞİ :

class Program
{
static void Main(string[] args)
{
Console.Title = "Çalışma";
Console.OutputEncoding = Encoding.GetEncoding("ibm857");


//Menuler için tanımlanan Dizi ve List<> dizi menüleri.
string[] dizi_menu/*Dizi adı*/ = new string[] { "C # CONSOLE KODLAMA", "C# NESNE Tanımlama", "Çıkış" };
List<string> listmenu_1/*List<> dizi adı*/ = new List<string>(dizi_menu/*Dizi adının çağrılması*/);
//Menü için tanımlanan dizi'nin bir List<> dizi haline dönüştürlme işlemi


List<string> listmenu_2 = new List<string>
{
"C # CONSOLE KODLAMA",
"C # NESNEL KODLAMA",
"Çıkış"
};

Console.CursorVisible = false;
while (true)
{
Console.Clear();

string secili_oge_1;
secili_oge_1 = Menu.dropmenu_1(listmenu_1);

if (secili_oge_1 == "C # CONSOLE KODLAMA")
{
Console.Clear();
}
else if (secili_oge_1 == "C # NESNEL KODLAMA")
{
Console.Clear();
}
else if (secili_oge_1 == "Çıkış")
{

Environment.Exit(0);
}
}
}
}
}
//Yeni bir CLASS sayfasında ki kodlara Erişim sağlıyorum.********************************************************************
class Menu
{
static int index = 0;//Ana sınıf alanı içerisinde "index" adında ikinci bir Metod oluşturuldu

public static string dropmenu_1(List<string> listmenu_1)
{
for (int i = 0; i < listmenu_1.Count; i++)
{
Console.SetCursorPosition(i + 10 , i + 15);
if (i == index)
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.Write(listmenu_1);
}
else
{
Console.Write(listmenu_1);
}
Console.ResetColor();
}
ConsoleKeyInfo basilan_tus;
basilan_tus = Console.ReadKey();


if (basilan_tus.Key == ConsoleKey.LeftArrow)
{
if (index <= 0)
{

}
else
{
index--;
}
}
else if (basilan_tus.Key == ConsoleKey.RightArrow)
{
if (index == listmenu_1.Count - 1)
{

}
else
{
index++;
}
}

else if (basilan_tus.Key == ConsoleKey.Enter)
{
return listmenu_1[index];
}
else if (basilan_tus.Key != ConsoleKey.RightArrow || basilan_tus.Key != ConsoleKey.LeftArrow || basilan_tus.Key != ConsoleKey.Enter)
{
// Console.WriteLine("Hatalı bir tıklama işlemi !!!");
}
else
{
return "";
}
Console.Clear();
return "";
}

}
}
Kodları yazı olarak atmasan da kod kısmına koyup atsan. Okunabilirliği çok az bu şekilde.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.