MDI Form ve Tabbed Page MDI Nasıl Yapılır?

MDI form kısa tanımı, iç içe form olarak yapılabilir. C# Windows Form çalışmalarında birden fazla ekranla çalışmalarda açılan ikinci, üçüncü vs. formların ana formdan bağımsız açılması yerine ana formun içinde açılmasını sağlayan yapıdır.

Formları içinde barındıracak olan ana form MDIParent, ana form içinde açılan formlara da MDIChild ismi verilir. Açılan her bir MDIChild, MDIParent formunun MDIChildren koleksiyonunda tutulur.

MDI form yapılırken yapılan işlemler şöyledir:

  • MDIParent olarak kullanılacak olan ana formun IsMdiContainer özelliği true olarak ayarlanır.
  • Ana form içinde açılacak olan child formun MdiParent özelliğine de this anahtar kelimesi ile ana forma bağlanır.
  • Child formu Show() metodu ile form açılır.

Projenin kodlarına aşağıdaki GitHub linkinden ulaşabilirsiniz:

https://github.com/saitorhan/StudyingMdiForms

Uygulama Videosu




SQL Server Maintance Plans ve Operatore Plan Sonucunda Mail Gönderme




Veri Tabanı Tablosundan Entity Class Oluşturma

Veri tabanı işlemlerinin gerçekleştirildiği yazılımlarda tabloların entity C# sınıfları gerekebilmektedir. Her ne kadar Visual Studio içerisinde barındırdığı araçlar ile bunu otomatik yapıyorsa da T-SQL kodları kullanılarak da ilgili sınıf SQL Server tarafında oluşturulup kopyala – yapıştır ile projeye eklenebilir.

Aşağıdaki T-SQL kodu içerisinde ilk satırdaki ‘TableName’ yerine tırnaklar içerisine sınıf karşılığı oluşturulacak tablo yazılıp çalıştırıldığında print komutu ile oluşturulan sınıf ekrana gelecektir.

declare @TableName sysname = 'TableName' 

declare @Result varchar(max) = 'public class ' + @TableName + ' 

{' 

select @Result = @Result + ' 

    public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; } 

' 

from 

( 

    select  

        replace(col.name, ' ', '_') ColumnName, 

        column_id ColumnId, 

        case typ.name  

            when 'bigint' then 'long' 

            when 'binary' then 'byte[]' 

            when 'bit' then 'bool' 

            when 'char' then 'string' 

            when 'date' then 'DateTime' 

            when 'datetime' then 'DateTime' 

            when 'datetime2' then 'DateTime' 

            when 'datetimeoffset' then 'DateTimeOffset' 

            when 'decimal' then 'decimal' 

            when 'float' then 'float' 

            when 'image' then 'byte[]' 

            when 'int' then 'int' 

            when 'money' then 'decimal' 

            when 'nchar' then 'char' 

            when 'ntext' then 'string' 

            when 'numeric' then 'decimal' 

            when 'nvarchar' then 'string' 

            when 'real' then 'double' 

            when 'smalldatetime' then 'DateTime' 

            when 'smallint' then 'short' 

            when 'smallmoney' then 'decimal' 

            when 'text' then 'string' 

            when 'time' then 'TimeSpan' 

            when 'timestamp' then 'DateTime' 

            when 'tinyint' then 'byte' 

            when 'uniqueidentifier' then 'Guid' 

            when 'varbinary' then 'byte[]' 

            when 'varchar' then 'string' 

            else 'UNKNOWN_' + typ.name 

        end ColumnType, 

        case  

            when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier')  

            then '?'  

            else ''  

        end NullableSign 

    from sys.columns col 

        join sys.types typ on 

            col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id 

    where object_id = object_id(@TableName) 

) t 

order by ColumnId 

set @Result = @Result  + ' 

}' 

print @Result 




Uzaktan DNS Adresi Değiştirme

Sistem yöneticileri için network yapısı ve içerisinde yer alan cihazların sürekliliği ön plandadır. Bazı durumlarda uzakta yer alan cihazların (Windows için) DNS ayarlarının değiştirilmesi gerekmektedir. Burada devreye Microsoft’un mükemmel denebilecek ürünlerinden biri olan Powershell devreye girmektedir.

Aşağıda yer alan powershell scriptini kullanarak uzak bilgisayarın dns ayarlarını değiştirebilirsiniz.

  • İlk satırda yer alan “C:\list\servers.txt” dosyası dns ayarları değiştirilecek makinelerin IP adresleri veya isimleri yer alıyor. Dosya yapısı her satıra bir makine bilgisi gelecek şekilde düzenlenmelidir.
  • $DNSServers = “10.1.0.254”,”10.1.0.253″ satırında da verilecek yeni DNS IP adresleri veriliyor. Bu örneğimizde 254 IP adresi birinci DNS, 253 IP adresi de ikinci DNS olarak ayarlanacak.

$computer = get-content C:\list\servers.txt 

$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration -computername $computer |where{$_.IPEnabled -eq “TRUE”} 

  Foreach($NIC in $NICs) { 

$DNSServers = "10.1.0.254","10.1.0.253" 

 $NIC.SetDNSServerSearchOrder($DNSServers) 

 $NIC.SetDynamicDNSRegistration(“TRUE”) 

}




Veri Tabanındaki Bütün Kolonlar

Veri tabanı yöneticilerinin görmek istedikleri konulardan biri de veri tabanı içinde yer alan kolonların listesidir. Aşağıdaki Sql kodu ile MS Sql server içerisinde veri tabanında yer alan bütün kolonları görebilirsiniz.

SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID  
ORDER BY schema_name, table_name;




Uzak Bilgisayar Yerel Gruplardan Kullanıcı Silme

Sistem yönetiminde istemci bilgisayarlardaki özellikle “Yöneticiler” grubunda yer alan kullanıcıların kontrol edilmesi son derece önemlidir. Bu kontrol sonucunda da gerekli durumlarda bu kullanıcıların silinmesi gerekiyor. Bu işlem için bir yazılım geliştirilmesi gerekiyorsa gerekli olan C# metotu aşağıdaki gibidir.

public bool RemoveUserFromAdminGroup(string computerNameVeyaIp, string silinecekKullanıcı) 

        { 
            try 

            { 

                var de = new DirectoryEntry("WinNT://" + computerName); 

                var objGroup = de.Children.Find("Administrators", "Group"); 
//Administrator: Kullanıcısı silinecek grup
//Group: Statik bir değerdir. Administrator öğesinin grup olduğunu belirtiyor.

                foreach (object member in (IEnumerable)objGroup.Invoke("Members")) 

                { 

                    using (var memberEntry = new DirectoryEntry(member)) 

                        if (memberEntry.Name == user) 

                            objGroup.Invoke("Remove", new[] { memberEntry.Path }); 

                } 

 

                objGroup.CommitChanges(); 

                objGroup.Dispose(); 

 

                return true; 

            } 

            catch (Exception ex) 

            { 

                MessageBox.Show(ex.ToString()); 

                return false; 

            } 

        }




Yönetici İznine (UAC) Takılan Program Sorunu

Çalışırken bazı programlar görünürde yönetici iznini gerektirecek her hangi bir işlem yapmamalarına rağmen yönetici izni istemektedirler. Özellikle bilgi güvenliği noktasında prosedürler yürüten firmalarda da kullanıcı bilgisayarı üzerinde yönetici olmadığından uygulamayı çalıştırmakta başarısız olmaktadır.

Programın yönetici izni istemesinin temelinde yatan neden, çalışırken ya sistem ayarlarına müdahale ediyor olması yada sistem dosyalarında işlem yapmaya çalışmasıdır. Burada sistem dosyaları sözü aklı karıştırmasın. Program “Program Files” varsayılan klasörüne yüklendiğinde kendi dosyaları da “Program Files” klasörünün özelliği gereği Windows tarafından sistem dosyası olarak işaretlenmektedir ve bu dosyalar üzerinde işlem yapabilmek için yönetici izni gerekmektedir.

Çözüm olarak karşımıza iki seçenek çıkmaktadır;

  • Kullanıcıya yerel yönetici haklarını vermek ki bu özellikle bilgisayar noktasında tecrübesi olmayan kullanıcılar tarafında ayrı bir güvenlik açığına sebep olmaktadır.
  • Diğer bir seçeneğimiz de programın kurulum yolunu değiştirmektir. Örneğin C:\ diski altında oluşturacağımız bir klasörü kurulum yolu olarak verirsek, oluşturduğumuz bu klasör sistem klasörü olmadığından uygulamamız da sıkıntısız çalışacaktır.




Domain Yapısındaki Grupları Client Local Gruplara Ekleme

Domain yapılarında yapılan işlemlerden biri de kullanıcılardan local adminlik dediğimiz yönetici haklarının alınmasıdır. Bu işlemi yapmada ki amaç, kullanıcının bilgisayarı amacı dışında kullanmasına engel olmaktır. Bu işlemi yaparken de, özellikle bilgi işlem departmanının local admine atanması gerekmektedir. Bu atamayı yapmanın çeşitli yolları olmaktadır;

  • Bilgi teknolojileri departmanının hepsini, Domain Admins grubuna dahil etmek: Bu seçenek güvenlik tehlikesini client bazından çıkarıp direk bütün yapı seviyesine çıkarır. Departmanda yer alan özellikle stajyer ve yeteri bilgiye sahip olmayan yeni çalışanların oluşturacağı güvenlik tehdidi göz ardı edilemez. Bu seçenek kabulümüz değil dolayısıyla
  • Her kurulan yeni client bilgisayara, kurulumdan sonra BT departmanındaki bütün kişileri elle yöneticiler grubuna eklemek. Bu yönteminde dezavantajları: Kişileri tek tek eklerken kişiler unutulabilir, departman değiştiren kişiler bilgisayarlarda yönetici olarak kalmaya devam edecek…
  • BT departmanı için domain yapısında bir grup oluşturup departman kişileri bu gruba üye edilir. Bu işlemden sonra Group Policy üzerinden oluşturulan bu grup clientlara otomatik olarak yönetici grubuna eklenir. Bu işlem için gereken group policy kuralı aşağıdaki gbidir.

Kuralın sol tarafında yer alan “Group” başlığı clientlara eklenecek olan domain üzerinde tanımlı olan gruptur. SORHAN burada domain adını temsil etmektedir. HelpDesk de BT departmanı grubudur. Sağ tarafta yer alan “Member of” başlığı da grubun client tarafında nereye ekleneceğini ifade eder. BUILTIN ifadesi client makineyi ifade eder ve sabittir. Administrators ifadesi de clent makine üzerinde tanımlı Administrators grubunu ifade eder.




GP Üzerinden Herkese Güncelleme Yetkisi Verme

Bilişim sistemlerinin en önemli konularının başında sistemin güvenliğidir. Konu güvenlik olunca da makinelerde yetkilendirme devreye giriyor. Her şirkette olması gereken yetki kısıtlarından biri de bilgisayarlarda local adminliklerin olmaması kuralıdır. Kullanıcılardan local admin yetkileri alındıktan sonra ortaya bir sıkıntı daha çıkmaktadır: o da güncellemeleri yüklemek için kullanıcılardan yönetici izni istemek…

Güncelleme yüklenmeyince sistem açıklarını kapatan güncellemeler sisteme yüklenmemektedir.

Çözümümüz şu olacak: Group policy üzerinden bütün kullanıcılara güncelleme yükleme izni vermemiz gerekmektedir. İlgili GP ve gerekli değeri aşağıdaki resimdeki gibidir.




Visual Studio İle GitHub Bağlantısı