'C# / ASP.NET/C#'에 해당되는 글 21건
- 2011/12/13 C# const, readonly, sealed의 차이점
- 2011/12/05 C# MDI 자식 폼에서 MDI 부모 폼 접근
- 2011/09/15 C#을 이용한 XML 직렬화
- 2011/06/17 C# Winform 프로그래밍에서 IE 띄우기
- 2011/04/05 Implementing the Singleton Pattern in C#
- 2011/01/19 C# 시스템 정보 가져오기
- 2010/10/05 C# 일관성 없는 액세스 가능성
class modifier
클래스를 더이상 상속할수 없게 만들고 싶은때 사용
[attributes] sealed class identifier [class-base] class-body [;]
const
필드나 로컬 변수의 선언을 변경하는데 사용한다.
const 로 선언된 필드나 로컬 변수는 변경될 수 없음을 지정한다.
[attributes] [modifiers] const type declarators;
readonly
const 와 역활은 같지만 초기화방법이 조금 차이가 있다.
선언과 동시에 초기화 할 수도 있고 생성자등에서 초기화가 가능한다.
즉 const는 compile time의 constant이고 readonly는 runtime에 constant로 사용될 수 있다.
[출처] const, readonly, sealed의 차이점
C#에서는 MdiParanet라는 변수를 제공하는 이는 폼의 MDI 부모의 레퍼런스이다.
사용 방법은
MDIMain parent = (MDIMain)this.MdiParent;
parent.SomeMethod();
[참고] How to Access MDI Parent Forms From MDI Child Form
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string age;
public string Age
{
get { return age; }
set { age = value; }
}
private Contract connect;
public Contract Connect
{
get { return connect; }
set { connect = value; }
}
}
public class Contract
{
private string telephone;
public string Telephone
{
get { return telephone; }
set { telephone = value; }
}
private string mobile;
public string Mobile
{
get { return mobile; }
set { mobile = value; }
}
}
2. XmlSerialization
class Program
{
static void Main(string[] args)
{
Contract contract = new Contract();
contract.Telephone = "02-000-0000";
contract.Mobile = "010-0000-0000";
Person person = new Person();
person.Name = "John";
person.Age = "100";
person.Connect = contract;
XmlSerializer x = new XmlSerializer(person.GetType());
x.Serialize(Console.Out, person);
Console.WriteLine();
Console.ReadLine();
}
}
3. 결과 확인
[참고] Visual C# 를 사용하여 XML 개체를 직렬화하는 방법
IE를 띄우려면 2가지 방법이 있다.
Process 클래스를 이용한 방법과 System32폴더에 존재하는 SHDocVw.dll을 참조해서 사용하는 것이다.
첫째 Process 클래스를 이용한 방법을 알아보자.
오나전 쉽다. 아래 코드를 보면 이해가 될 것이다.
여기서 Process 클래스의 WaitForExit(); 함수를 호출하면 Modal형태로 띄울 수 있게된다.
------------------------------------------------------------------------------------------------------------
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.Arguments = "http://www.naver.com";
Process browser = new Process();
browser.StartInfo = startInfo;
browser.Start();
browser.WaitForExit();
}
------------------------------------------------------------------------------------------------------------
둘째 SHDocVw.dll를 참조한 방법을 살펴보자.
1. System32 폴더에서 SHDocVw.dll를 찾아 참조를 한다.
2. 그리고 아래 샘플 코드를 보면 이해가 될 것이라 생각한다.
- (예1) 브라우저로 창을 띄움
------------------------------------------------------------------------------------------------------------
object vPost, vHeaders, vFlags, vTargetFrame, vUrl;
string cPostData;
vFlags = null;
vTargetFrame = null;
vUrl = "http://localhost/testpage.asp";
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Convert.ToChar(10) + Convert.ToChar(13);
cPostData = "test1=1&test2=2&test3=3";
vPost = ASCIIEncoding.ASCII.GetBytes(cPostData);
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
ie.Visible = true;
ie.Navigate2(ref vUrl, ref vFlags, ref vTargetFrame, ref vPost, ref vHeaders);
------------------------------------------------------------------------------------------------------------
- (예2) 팝업(팝업형태의브라우저)으로 창을 띄움
a. 빨갛게 되어있는 소스만 틀리므로 그부분을 참고한다.
b. SHDocVw.IWebBrowserApp 속성은 더 있는데 어떻게 써야할지는 아직 잘 모르겠다~ (모르면 구글링을 해보세요)
------------------------------------------------------------------------------------------------------------
object vPost, vHeaders, vFlags, vTargetFrame, vUrl;
string cPostData;
vFlags = null;
vTargetFrame = null;
vUrl = "http://localhost/testpage.asp";
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Convert.ToChar(10) + Convert.ToChar(13);
cPostData = "test1=1&test2=2&test3=3";
vPost = ASCIIEncoding.ASCII.GetBytes(cPostData);
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
SHDocVw.IWebBrowserApp WebBro = (SHDocVw.IWebBrowserApp)ie;
WebBro.Height = 500; // 세로 길이
WebBro.Width = 500; // 가로 길이
WebBro.ToolBar = 0;
WebBro.Visible = true;
WebBro.Navigate(vUrl.ToString(), ref vFlags, ref vTargetFrame, ref vPost, ref vHeaders);
------------------------------------------------------------------------------------------------------------
아무튼 위와 같은 코드를 통해 IE를 띄울 수 있으며
Process에서는 MainWindowHandle 가지고 있고 SHDocVw.InternetExplorer 클래스 또한 HWND라는 속성이 있으므로
각 속성들을 통해 프로세스를 주무를 수 있지 않을까 싶다. (안되면 뭐 말고~)
[출처] [C#] Winform 프로그래밍에서 IE 띄우기
현재 시스템에 로그인된 사용자의 이름 가져오기
Environment.UserName;
시스템의 도메인 명을가져오기
Environment.UserDomainName;
시스템의 디렉토리 가져오기
Environment.SystemDirectory;
현재 운영체제의 버전 가져오기
Environment.OSVersion.VersionString;
로컬 시스템의 NetBIOS 이름 가져오기
Environment.MachineName;
현재 작업 디렉토리 가져오기
Environment.CurrentDirectory;
현재 운영체제의 플랫폼 가져오기
Environment.OSVersion.Platform.ToString();
현재 운영체제의 프로세서 갯수 가져오기
Environment.ProcessorCount;
시스템이 운영되고 있는 시간 가져오기(밀리세컨드)
Environment.TickCount;
[출처] Get Current Logged on User Name of Windows Operating System using C#
클래스를 선언한 후 그 클래스를 매개변수로 사용하다 보면 아래와 같은 에러가 발생할 때가 있습니다.
분명히 해당 클래스를 다른 곳에서는 그냥 썼는데 여기서는 왜 에러가 발생할까?
문법적으로 문제도 없고, 특별한 점도 없어 보입니다.
해결 방법
절대 혼자서는 해결이 안될거 같아 인터넷의 힘을 빌렸습니다.^^
결론은 class 선언할때 public 으로 선언해야 합니다.
예를 들어, A 클래스를 사용하려고 하고 A 클래스가 아래와 같을 때,
{
class A{}
}
A a; // 형태로 선언해서 사용하면 아무런 문제가 없는데,
func(A a);// 형태의 매개 변수로 사용하면 "일관성 없는 액세스 가능성"에러가 발생합니다.
이때는 아래처럼 선언해 주면 됩니다.
{
public class A{}
}
[출처] 오류 CS0051: 일관성 없는 액세스 가능성: 매개 변수 형식이 ..메서드보다 액세스하기 어렵습니다

Prev
Rss Feed