728x90
300x250

[C#.NET] A 폼 닫고 B 폼 열기

Visual Basic 6을 사용해보신 분은 'hide'와 'show'만 가지고 자유자재로 컨트롤을 쉽게 제어할 수 있었습니다.
더불어 Application의 닫기 이벤트 또한 내부함수로 구성되어 있어서 사용하기에 편리했습니다.
C#은 문제를 도출하기 위해 다소 다른 방법을 사용합니다.
이 예제는 그러한 상황을 해결하기 위해 만들어졌습니다.


1. 인터페이스 설계

'Sample'이라는 제목을 가지고 있는 A 폼 입니다.
'Main'이라는 제목을 가지고 있는 B 폼 입니다.

 

 

 

 

 

 

 

그림 1) A 폼 닫고 B 폼 열기

솔루션 탐색기에서 'Program.cs'를 클릭합니다.


2. 구현

아래의 글 상자는 초기 소스 코드입니다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace sample
{
    static class Program
    {
        /// <summary>
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Login());
        }
    }
}

아래와 같이 신규 선언을 해줍니다.

            Application.Run(new Login());
            Main MainApp = new Main();
            Application.Run(MainApp);


Main은 이 예제의 실제 파일 이름입니다.
Application.Run()은 메인 폼 호출에서 도출해낸 아이디어입니다.



A폼으로 소스(Login.Designer.cs)를 엽니다.
초기 소스는 아래와 같이 선언되어 있음을 알수 있습니다.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace sample
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();
        }
    }
}


폼을 아래와 같이 구성 합니다.



그리고 버튼을 더블 클릭합니다.

        private void sLogin_Btn_Click(object sender, EventArgs e)
        {
        }


위와 같은 소스가 추가 됨을 알 수가 있습니다.

        {
        }


사이에 소스 코드를 입력합니다.

            Main MainApp = new Main();
            MainApp.Show();

            this.Close();



그리고 B 폼을 신규 윈도우 폼 추가합니다. 폼 이름은 Main으로 설정합니다.

조금 여운을 남겨놓습니다.
Program.cs에 클래스를 활용한다면 A 폼을 종료할 때 B 폼이 강제적으로 실행되는 것을 막을 수 있습니다.

반응형
728x90
300x250

[PC 활용] Visual Studio 2010의 InstallShield 2011

 

Visual Studio 2010에서 InstallShield 2011을 연동해서 사용하고 싶은 분은 아래의 자료를 받으시면 됩니다.

 


1. InstallShield 2011 for Visual Studio 2010

 

InstallShield2011LE.a00

InstallShield2011LE.a01

InstallShield2011LE.a02

InstallShield2011LE.a03

InstallShield2011LE.a04

InstallShield2011LE.a05

InstallShield2011LE.alz

 

이 프로그램은 참고로 비주얼 스튜디오 2010에서만 사용가능합니다.
반응형
728x90
300x250

[ASP.NET] Jquery - Modal Dialog 사용법

ASP.NET에서 Ajax(변형된 자바스크립트 - 비동기식 자바스크립트)를 사용하기 위해선 크게 두 가지 방법으로 요약할 수 있습니다.

첫 번째로 AjaxControlTookit을 이용하는 방법입니다. Microsoft에서 공개하고 있는 DLL 라이브러리를 이용하여 사용할 수 있습니다.
(홈페이지 주소 : http://www.asp.net/ajax/ajaxcontroltoolkit/)

두 번째로 jQuery를 이용하는 것입니다.
jQuery 팀 프로젝트에서 운영하는 jQuery(자바스크립트)를 이용하여 구현하는 방법을 들 수 있겠습니다.
(홈페이지 주소 : http://jqueryui.com)

이번 게시물은 간편하고 사용하기는 쉬우나 (힘들게하는) AjaxControltoolkit이 아닌 jQuery를 ASPX(ASP.NET 파일)에 적용하는 방법을 소개하겠습니다.


1. jQuery 홈페이지에서 사용자 테마에 맞는 jQuery 내려받기

jQuery 홈페이지에서 Download를 클릭합니다.



왼쪽에 Download를 클릭합니다.
참고) design a custom theme을 클릭해서 사용자 입맛에 맞게 설정된 테마가 포함된 라이브러리를 내려받으실 수 있습니다.



압축 파일은 이처럼 구성되어 있습니다.
index.html 파일을 열면 Demonstration을 보실 수 있습니다.

2. Visual Studio.NET의 ASP.NET 프로젝트에 적용시키기



사용자가 만들어낸 프로젝트 위치에 js와 css 폴더를 붙여 넣습니다.
(Visual Studio.NET의 프로젝트 경로는 내 문서에 Visual Studio 그리고 Projects 폴더 안에 생성되어 있습니다.)
-> 사용자가 별도로 지정한 경우에는 해당하지 않습니다.



Visual Studio의 자신의 프로젝트에 아까 복사 붙여 넣기 한 폴더를 끌고 와서 집어넣습니다.

아래의 코드는 Modal Dialog를 ASP.NET에서 사용할 수 있도록 구성된 예제입니다.

<%@ Page Language="C#" AutoEventWireup="true"  %>
<%@ Import Namespace="System.Collections.Generic" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/C#" runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            ClientScript.GetPostBackEventReference(uxGrid, string.Empty);
            if (!Page.IsPostBack)
            {
                List<int> test = new List<int>();
                test.Add(2);
                test.Add(3);
                test.Add(32);
                test.Add(223);
                test.Add(5);
                test.Add(8);
                uxGrid.DataSource = test;
                uxGrid.DataBind();
            }
        }
        protected void uxRowAction_Click(object sender, EventArgs e)
        {
            Button b = sender as Button;
            if (b != null)
            {
                uxTest.Text = "clicked " + b.CommandArgument;
            }
        }
    </script>
    <link href="smoothness/jquery-ui-1.7.2.custom.css" rel="stylesheet" type="text/css" />
    <script src="jquery-1.3.2.min.js" type="text/javascript"></script>
    <script src="jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $().ready(function() {
            $('#dialogContent').dialog({
                autoOpen: false,
                modal: true,
                bgiframe: true,
                title: "MySql Membership Config Tool",
                width: 800,
                height: 600
            });
        });
        function rowAction(uniqueID) {
            $('#dialogContent').dialog('option', 'buttons',
                {
                    "OK": function() { __doPostBack(uniqueID, ''); $(this).dialog("close"); },
                    "Cancel": function() { $(this).dialog("close"); }
                });
                $('#dialogContent').dialog('open');
            return false;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dialogContent">
        <h3>confirm</h3>
        <p>Click ok to accept</p>
    </div>
    <asp:Literal ID="uxTest" runat="server" />
    <div>
        <asp:DataGrid ID="uxGrid" runat="server" AutoGenerateColumns="false">
            <Columns>
                <asp:TemplateColumn>
                    <ItemTemplate>
                        <asp:Button ID="uxRowAction" runat="server" CommandArgument='<%#Container.DataItem.ToString() %>' Text="Row Action" OnClick="uxRowAction_Click" OnClientClick="javascript:return rowAction(this.name);" />
                    </ItemTemplate>
                </asp:TemplateColumn>
            </Columns>
        </asp:DataGrid>
    </div>
    </form>
</body>
</html>

참조)
http://www.integratedwebsystems.com/2009/12/using-jquery-modal-dialog-confirmation-with-an-asp-net-server-control/

위의 내용을 참조하여 적용하는 방법에 대해 확인하시기 바랍니다.

출력 결과는 아래와 같습니다.



초깃값이 800 * 600 해상도인데 캡처를 하기 위해서 수동으로 줄였습니다.



조금 전에 jQuery를 압축 풀었던 폴더로 돌아가시면 Demo 자료가 있습니다.
이 자료들을 참고하시어 ASP.NET 환경에 맞게 설정해주시면 됩니다.


2. 이 글을 마치면서 느낀 점
AjaxControlToolkit도 편리하지만, jQuery보다는 매력이다는 생각은 들지 않습니다.
jQuery는 Google과 같은 거대한 사이트에서도 적용하고 있을 만큼 굉장히 이식성이 좋습니다.
더불어 Open License라서 개조하기도 수월합니다.
AjaxControlToolkit은 DLL을 웹 서버에도 적용시켜줘야 하고 손이 많이 타기 때문에 개인적으로 jQuery가 더 마음에 듭니다.
이만 글을 정리하며 많은 분이 성공적인 Web2.0 환경을 구축하길 바랍니다.
반응형
728x90
300x250

[PC 활용] (C#.NET) Crystal Report 13(Visual Studio 2010) 배포 시 문제점

Visual Studio 2010을 통해 Crystal Report 13를 배포하는 데 있어서 큰 문제를 두 가지로 요약하여 언급하고자 합니다.
빌드 방법에는 'Oneclick 게시', 'MSI Installer'가 존재합니다. 그 외에도 Installshield 2010도 있을 것이며 다양한 방법이 존재합니다만 Visual Studio 2010을 주목적으로 쓴 글이므로 제외하도록 하겠습니다.
Oneclick 배포에 관하여 언급한 주제는 필수 구성요소입니다. MSI Installer로의 배포에 관하여 언급한 부분은 Mail Merge 부분과 Oneclick과 같이 솔루션 자체에 필수 구성요소를 설정하는 방법이 있겠습니다.

운영체제: Microsoft Windows 7
소프트웨어: Visual Studio 2010
                    Crystal Report 13


1. Mail Merge Module

메일머지 모듈을 사용하여 MSI 인스톨러로 배포 시 문제점에 대해서 언급하고자 합니다.
Crystal Report 13의 Mail Merge Module을 사용할 때 MSI 인스톨러에 Crystal Report 13을 통합하여 배포할 수 있으므로 매우 편리합니다.



그림 1-1. Visual Studio 2008의 병합 모듈

Visual Studio 2010에서 rpt파일을 작성할 때 '코드를 확인할 수 없습니다.'라는 오류를 발생하는 것을 확인할 수 있습니다. 단, Mail Merge Module로 빌드한 솔루션을 개발환경 PC에 설치하였을 때 발생합니다.
저는 Crystal Report 13(2010)을 사용한 프로젝트를 하게 되었을 때 차라리 별도의 라이브러리를 배포할 수 있는 URL을 배포하는 게 괜찮다고 생각됩니다.
Mail Merge Module을 함께 솔루션 빌드하였을 때 수 많은 코드로 말미암아 컴파일 시간이 오래 걸릴 뿐 더러 개발환경에 많은 영향을 미치기 때문에 제외하고 컴파일하는 것을 권장합니다.

http://www.businessobjects.com/jump/xi/crvs2010/us2_default.asp


2. 솔루션 빌드의 필수 구성 요소



그림 2-1. 솔루션의 필수 구성요소

솔루션의 필수 구성요소에 보면 Crystal Report 13 Runtime Pack이 존재합니다.
Crystal Report 13 Runtime Pack을 웹 사이트에서 다운 받기를 체크할 경우에 경로를 찾지 못해 배포에 큰 타격을 입게 됩니다. 내 응용 프로그램 속에 함께 빌드하는 방법도 이 문제를 해결하는 데 좋은 대안이 될 수 있겠으나 파일의 이름을 정확히 모른다면 큰 타격을 입게 될 것입니다.


3. 결론

MSI Installer 빌드시 핵심 라이브러리 파일을 조건문으로 지정하여 배포하는 것입니다.
반응형
728x90
300x250

[PC 활용] (C#.NET) Crystal Report 13 Release 할 때 crdb_adoplus.dll 어셈블리 오류

그림 1. crdb_adoplus.dll 오류, Visual Studio

운영체제: Microsoft Windows 7
소프트웨어: Visual Studio 2010, Crystal Report 13


1. Legacy를 통해 정책적으로 인증을 허용해줄 때 인증 파일이 정상적으로 처리되는 것을 확인할 수 있었습니다.

 <startup useLegacyV2RuntimeActivationPolicy="true">
     <supportedRuntime version="v4.0"/>
  </startup>

app.config을 통해서 인위적인 조작을 통해 Crystal Report 13(Visual Studio 2010)을 구현시킬 수 있습니다.


2. 메일머지 병합 모듈


Visual Studio 2010 Merge 모듈의 위치는 C:\Program Files\Common Files\Merge Modules에 있습니다.
사용 목적은 보고서 따위를 배포할 때 사용합니다.
SAP Business Object에서는 InstallShield 2010이나 MSI 4.0로의 출력시 배포를 위해 제공하고 있습니다.

반응형
728x90
300x250

[C#.NET] OleDB를 이용한 우편번호 검색 구현하기

.NET Framework는 MS 제품에 효율성과 개발자들에게 생산성을 위하여 많은 기능을 제공하고 있습니다.
데이터베이스 프로그래밍 또한 몇 번 클릭을 통해 쉽게 구현할 수 있습니다.
기존에 우리가 많이 사용하는 엑셀을 쉽고 간편하게 제어할 수 있도록 .NET Framework 라이브러리에 이미 구성되어 있습니다.

이번 예제에서는 OLEDB를 이용한 우편번호 검색을 구현하는 방법을 소개하고자 합니다.


1. 작성 예제

큰 주제 : Excel과 Access를 활용한 데이터베이스 구현



이번에 만들 예제의 모습은 위의 그림과 같습니다.

1-1. 출력될 디렉토리에 반드시 존재해야할 파일

데이터베이스 파일이 필요합니다.
이번 예제에 사용된 자료를 첨부했으니 다운받아서 실습하시기 바랍니다.

address.xls
address.mdb

1-2. 폼 인터페이스 디자인



1-3. 소스 코드

엑셀을 이용한 자료 처리

using System.Data.OleDb;

namespace WindowsApplication
{
public partial class Form1 : Form
{
pubilc Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=|DataDirectory|\\address.xls;" +
"Extended Properties=Excel 8.0;";

string strQry;
OleDbConnection oleConn = new OleDbConnection(connectionString);
oleConn.Open();

strQry = "Select TOP 10 * FROM [Address$]";

OleDbDataAdapter oleData = new OleDbDataAdapter(strQry, oleConn);
DataTable excelData = new DataTable();

dataGridView1.DataSource = excelData;
oleData.Fill(excelData);
oleConn.Close();

// 자동 크기 조절을 하고자 할 때 옵션
for (int i = 0; i < dataGridView1.ColumnCount; i++)
   dataGridView1.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);

 
}
}


Access DB를 이용한 자료 처리

using System.Data.OleDb;

namespace WindowsApplication
{
public partial class Form1 : Form
{
pubilc Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=|DataDirectory|\\zipcode.mdb;";

string strQry;
OleDbConnection oleConn = new OleDbConnection(connectionString);
oleConn.Open();

strQry = "Select TOP 10 * FROM zipcode";

OleDbDataAdapter oleData = new OleDbDataAdapter(strQry, oleConn);
DataTable AccessData = new DataTable();

dataGridView1.DataSource = AccessData;
oleData.Fill(AccessData);
oleConn.Close();

// 자동 크기 조절을 하고자 할 때 옵션
for (int i = 0; i < dataGridView1.ColumnCount; i++)
   dataGridView1.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);

 
}
}
}


2. 결론
Access는 중간 DBMS이라면, Excel은 작은 DBMS입니다.


3. 소스 코드
101223_OLEDB_C#_Lecture_Example.zip
반응형
728x90
300x250

[C#.NET] Delegate를 이용한 폼 처리

Delegate 개념과 이벤트 개념을 이해했다고 가정하고 진행합니다.
조사해본 폼 처리에 대한 방법은 다양합니다.

 
 1. 매개변수를 이용한 폼 처리 방법
 2. 전역변수를 이용한 폼 처리 방법
 3. Delegate 개념을 이용한 폼 처리 방법
 4. 클래스를 이용한 폼 처리 방법

 N......
 

방법은 많이 있지만, 그래도 수집한 자료 중에 가장 괜찮다고 생각하는 방법 중 Delegate와 이벤트를 이용한 것이 가장 C# 다운 방법이라 생각해서 올려보게 되었습니다. 다른 블로그에서 수집했었는데 출처를 잊어버려서 생략하겠습니다.


1. 프로그램 동작 과정

1-1. 폼 인터페이스 설계



1-2. Form1.cs



1-3. Form2.cs


2. 코드

Form2.cs 코드

 

namespace host
{
public delegate void toForm1(string s1, string s2);
public partial class Form2 : Form
{

public static event toForm1 toform1;

public Form2()
{
InitializeComponent();
}

private void Button1_Click(object sender, EventArgs e)
{
toform1("안녕하세요", "하이");
this.close();
}

}

}


Form1.cs

namespace host
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
Form2.toform1 += new toForm1(labelchance);
}
void labelchance(string s1, string s2)
{
this.label1.Text = s1;
this.label2.Text = s2;
}
private void button1_Click(object sender, EventArgs e)
{
Form Fs = new Form2();
Fs.Show();
}

}
}

2-1. 소스 코드를 요약하자면,
Form1은 데이터가 수정될 값이 존재하는 곳을 의미하며, Form2는 데이터 수정 값을 전달하는 소스의 역할을 합니다.
이 코드를 실생활에 응용하자면, 우편번호 검색, 데이터 자료 처리에 응용 가능합니다.

2-2. 첨부(Attachment)
101223_C#_Delegate_Form_Example.zip

반응형
728x90
300x250

[C#.NET] openFileDialog를 이용한 파일 첨부 기반 예제

이번 예제는 openFileDialog를 활용하여 파일 첨부 기반을 만드는 방법을 소개하도록 하겠습니다.
이 강좌는 파일 처리 기능은 구현하지 않았습니다. 이유는 openFileDialog를 활용하는 것이 핵심 키워드이기 때문입니다.
이 점을 인지하고 읽어주시기 바랍니다.
한 가지 더 말씀드리자면, openFileDialog를 활용하는 예제이기에 파일 제약 조건에 관하여 언급하였습니다.


1. 폼 인터페이스 디자인



TextBox, Button, openFileDialog를 적절히 배치해주시기 바랍니다.

 

 


2. 소스 코드

Button을 더블 클릭하시어 소스코드를 불러오시고 입력하시기 바랍니다.


        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.DefaultExt = "jpg";
            openFile.Filter = "Images Files(*.jpg; *.jpeg; *.gif; *.bmp; *.png)|*.jpg;*.jpeg;*.gif;*.bmp;*.png";
            openFile.ShowDialog();
            if (openFile.FileNames.Length > 0)
            {
                foreach (string filename in openFile.FileNames)
                {
                    this.textBox1.Text = filename;
                }
            }
        }


openFile.DefaultExt = "기본확장자";
openFile.Filter = "항목이름정의1|확장자1;확장자2;  … 확장자n;|   … 항목이름정의n|확장자1;확장자2;  … 확장자n;";
openFile.ShowDialog();  -> 파일 열기 창 호출



3. 동작 과정




첨부(Attachment)
101222_c#_Example.zip

 

반응형

+ Recent posts