'C# / ASP.NET'에 해당되는 글 42건

  1. 2011/12/13 C# const, readonly, sealed의 차이점
  2. 2011/12/05 C# MDI 자식 폼에서 MDI 부모 폼 접근
  3. 2011/11/23 ASP.NET에서 Log4Net 사용하기
  4. 2011/09/15 C#을 이용한 XML 직렬화
  5. 2011/09/02 Visual Studio에서 블럭 선택
  6. 2011/06/20 ASP.NET Texbox에 포커스 이동시 팝업창 띄우기
  7. 2011/06/17 C# Winform 프로그래밍에서 IE 띄우기
2011/12/13 16:10

C# const, readonly, sealed의 차이점

sealed
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의 차이점
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2011/12/05 15:33

C# MDI 자식 폼에서 MDI 부모 폼 접근

MDI를 사용하다 보면 자식 폼에서 부모 MDI에 접근이 필요한 경우가 있다.
C#에서는 MdiParanet라는 변수를 제공하는 이는 폼의 MDI 부모의 레퍼런스이다.

사용 방법은
MDI 부모폼의 이름이 MDIMain이라고 가정했을때

MDIMain parent = (MDIMain)this.MdiParent;
parent.SomeMethod();


[참고] How to Access MDI Parent Forms From MDI Child Form
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2011/11/23 16:39

ASP.NET에서 Log4Net 사용하기

log4net은 응용프로그램에서와 같이 ASP.NET 웹서비스에서도 로그를 남기기 위해 사용될 수 있다.log4net은 응용프로그램에서와 같이 ASP.NET 웹서비스에서도 다음의 2가지 작업만 하면 로그를 남길 수 있다.

1. Global.asax에서 로깅 환경 설정을 초기화 하는 코드 추가
2. Web.config에서 log4net 관련 설정 추가

ASP.NET 웹서비스에서는 반드시 Global.asax파일을 정의해야 하는데, 직접 asax에 또는 코드비하인드 파일에 초기화 코드가 추가되어져야 한다.

다음의 코드가 가장 일반적으로 로그 초기화에 사용되는 Global.asax파일 내용이다.

<%@ Application Language="C#" %>
<script runat="server">
private void Application_Start(Object sender, EventArgs e)
{
     log4net.Config.DOMConfigurator.Configure();
}
</script>

만약 Global.asax의 코드비하인드 파일을 사용할 거라면 Global.asax는 간단하게 다음과 같이 정의 하면되고
<%@ Application Codebehind="Global.asax.cs" Inherits="MyApp.Global" %>

다음과 같은 코드를 Global.asax.cs파일에 추가하면 된다.

namespace MyApp
{
  public class Global : System.Web.HttpApplication
  {
    /// 
    /// Called when the web application starts
    /// 
    /// who
    /// what
    protected void Application_Start(Object sender, EventArgs e)
    {
      // 응용프로그램이 로딩 될 때 로그를 초기화 함.
      log4net.Config.DOMConfigurator.Configure();
    }

  }
}



웹서비스가 로드(또는 리로드 - load or reload) 될 때 Application_Start 메쏘드가 자동으로 호출된다. 보는 바와 같이 이때 log4net환경의 초기화를 이때 수행한다.

각각의 웹서비스들이 자체 폴더(버추얼 디렉토리)를 가지고 있고 각 폴더에는 웹서비스의 설정을 위해 Web.config 파일들을 하나씩 가지고 있게 되는데 이 파일에 log4net을 위한 설정을 추가하게 된다.

log4net의 설정값을 가지고 있는 Web.config 파일의 예는 다음과 같다.



  
    


[출처] ASP.NET 에서 Log4Net 사용하기
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2011/09/15 14:54

C#을 이용한 XML 직렬화

1. XML로 변환할 클래스 선언

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 개체를 직렬화하는 방법
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2011/09/02 16:53

Visual Studio에서 블럭 선택

Alt + Shift + 방향키를 이용해 선택가능

SQL Management Studio에서도 동일


[출처] Block selection with keyboard shortcut in SQL Management Studio (SSMS)
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2011/06/20 19:31

ASP.NET Texbox에 포커스 이동시 팝업창 띄우기

1. 팝업창을 띄우기 위한 javascript를 aspx파일에 작성

axpx 파일
function CheckId() {
    window.showModalDialog("CheckID.aspx", window, "dialogWidth:410px; dialogHeight:258px;status:no; scroll:no;help:no;unaborned:no");
}


 2. Code Behind에서 Textbox에 javascript 연결

axpx.cs (code behind)
protected void Page_Load(object sender, EventArgs e)
{
    txtUserId.Attributes.Add("onFocus", "CheckIdl()");
}


[참조] Change Textbox/Input background color on focus
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2011/06/17 13:34

C# Winform 프로그래밍에서 IE 띄우기

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 띄우기

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0