Автор работы: Пользователь скрыл имя, 14 Декабря 2014 в 13:35, отчет по практике
Эпам системз — крупнейший поставщик услуг в области разработки программного обеспечения и решений на территории России, стран СНГ, Центральной и Восточной Европы
3.1.2.4.3. If the search field contains a search phrase, which has no matches in the document:
1) The following text is displayed: "You can search for text in your document by typing in the search box above. Click the X button to cancel your search."
2) The label with the amount of search results shows "No matches".
3.1.2.5. Search Results Navigation Buttons (E)
The buttons are disabled unless the search results are displayed.
Tooltips for previous/next navigation buttons are: "Previous Search Result" and "Next Search Result" appropriately.
3.2. Find and Replace dialog
3.2.1. Triggers
3.2.1.1. Ribbon -> Home tab -> Editing group -> Find button's menu -> Advanced Find (the dialog opens with the Find tab active)
3.2.1.2. Ribbon -> Home tab -> Editing group -> Replace (the dialog opens with the Replace tab active)
3.2.2. Major Components
The dialog works the same as described in Word 2007 Misc - find and replace, p. 1.
3.2.3. Common Behavior
3.2.3.1. If the dialog is invoked while the search box of the navigation pane contains any text, the text shall be present in the dialog's search box either both on Find and on Replace tabs.
3.2.3.2. "Find Next" button performs the navigation within the search results, the Navigation Pane's search results remain as is (the same as in real application).
3.2.3.3. "Cancel" button closes the dialog. The Navigation Pane's behaviour is the following:
1) the search phrase remains in the Navigation Pane's search box, but the search results are cleared.
2) the following text is displayed: "You can search for text in your document by typing in the search box above. Click the X button to cancel your search."
3) The label shows "Click the arrows to continue your search".
4) Pressing any navigation arrow activates the search.
Comments
1. The Navigation pane shall always be switched off by default.
Реализовывать требуемый функционал можно было используя 2 подхода: добавить код создания и логики работы панели на главную форму Word, либо написать отдельный контрол, и затем добавить его на форму. Второй подход является наиболее предпочтительным, т.к. во-первых, написанный единажды компонент можно переиспользовать, если это потребуется в дальнейшем, и во-вторых, с отдельным компонентом проще работать. Также вынесение кода контрола в отдельный компонент способствует более “чистому” коду класса формы, где содержится только логика взаимодействия компонентов без их реализации. В процессе разработки использовались базовые компоненты DevExpress. На их основе были написаны 2 модуля: NavigationPanel и SearchResultControl. Исходный код этих компонент приводится соответственно в приложениях 1 и 2.
Рис. 2: симуляция MS Word 2010
Написанный компонент позволил добавить новую функциональность в симуляцию MS Office 2010 связанную с поиском слов и фраз. Выше приводится пример работы симулируемого приложения.
ЗАКЛЮЧЕНИЕ
Разработанный модуль полностью соответствует предъявленным требованиям. Тестирование модуля выявила ошибки, которые были успешно устранены. При разработке были применены современные технологии и язык программирования.
В ходе прохождения учебной практики был закреплён материал, предлагавшийся к изучению в университете, и успешно применён на практике при реализации выше упомянутого модуля.
ПРИЛОЖЕНИЕ 1
[Исходный код пользовательского компонента SearchResultControl]
namespace Vista.Applications.Office2007.
{
public partial class SearchResultControl : DevExpress.XtraEditors.XtraUse
{
private readonly int _page;
private int _textPosition;
private bool _actAsSearchResult;
public SearchResultControl()
{
InitializeComponent();
searchResultText.BorderStyle = BorderStyle.None;
}
public SearchResultControl(string text, int position, int page) : this()
{
ProcessText(text);
_textPosition = position;
_page = page;
_actAsSearchResult = true;
searchResultText.BorderStyle = BorderStyle.FixedSingle;
}
public string ResultText
{
get { return searchResultText.Text; }
set { ProcessText(value); }
}
public int TextPosition
{
get { return _textPosition; }
set { _textPosition = value; }
}
private void ProcessText(string text)
{
using (Graphics g = CreateGraphics())
{
SizeF size = g.MeasureString(text, searchResultText.Font, 120);
int h = (int)Math.Ceiling(size.Height)
Height = h > 45 ? h : 45;
searchResultText.Text = text;
}
}
private void SearchResultControl_
{
if (_actAsSearchResult)
{
SelectSearchResult(true);
searchResultToolTipController.
}
}
private void SearchResultControl_
{
if (_actAsSearchResult)
{
SelectSearchResult(false);
searchResultToolTipController.
}
}
public void SelectSearchResult(bool select)
{
if (_actAsSearchResult)
{
Appearance.BackColor = select ? Color.Gold : Color.White;
}
}
private void searchResultText_Enter(object sender, EventArgs e)
{
ActiveControl = contentPanelControl;
}
private void searchResultText_Click(object sender, EventArgs e)
{
OnClick(e);
}
private void searchResultText_KeyDown(objec
{
OnKeyDown(e);
}
private void contentPanelControl_
{
OnKeyDown(new KeyEventArgs(e.KeyCode));
}
}
}
ПРИЛОЖЕНИЕ 2
[Исходный код пользовательского компонента NavigationPanel]
namespace Vista.Applications.Office2007.
{
public partial class NavigationPanel : DevExpress.XtraEditors.XtraUse
{
#region private fields
private const int CancelImageIndex = 17;
private const int SearchImageIndex = 2;
private readonly ControlDictionary _localization;
private readonly List<SearchResultControl> _searchResults;
private WordApplication _app;
private FindAndReplaceDialog _searchDialog;
private WordControl _wordControl;
private string _textToFind;
private string _noMatchesText;
private string _noResultsText;
private string _cancelledSearchText;
private string _matchesText;
private string _searchButtonToolTipText;
private string _cancelButtonToolTipText;
private int _currentResultIndex;
#endregion
#region public properties
public WordApplication App
{
get
{
return _app;
}
set
{
if (value != null)
{
_app = value;
_wordControl = _app.MainForm.WordControl;
}
}
}
#endregion
#region Constructor & Localization
public NavigationPanel()
{
InitializeComponent();
_localization = LocalizationDictionary.
Localize();
_searchResults = new List<SearchResultControl>();
searchTextEdit.Focus();
ShowNoResultsText(true);
}
private void Localize()
{
navigationLabel.Text = _localization.GetString("
minimizeButton.ToolTip = _localization.GetString("
closeButton.ToolTip = _localization.GetString("
searchTextEdit.Properties.
searchTextEdit.Properties.
additionalSearchButton.ToolTip = _localization.GetString("
_noMatchesText = _localization.GetString("_
_matchesText = _localization.GetString("_
_cancelButtonToolTipText = _localization.GetString("_
searchButton.ToolTip = _searchButtonToolTipText = _localization.GetString("_
prevSearchResultButton.ToolTip = _localization.GetString("
nextSearchResultButton.ToolTip = _localization.GetString("
pagesTab.Tooltip = _localization.GetString("
headingTab.Tooltip = _localization.GetString("
searchResultsTab.Tooltip = _localization.GetString("
_cancelledSearchText = _localization.GetString("_
_noResultsText = _localization.GetString("_
}
#endregion
#region Event handlers
private void searchButton_Click(object sender, EventArgs e)
{
StartSearch();
}
private void additionalSearchButton_Click(o
{
searchPopupMenu.ShowPopup(
}
private void closeButton_Click(object sender, EventArgs e)
{
CloseNavigationPane();
}
private void CloseNavigationPane()
{
if (_app != null)
{
_app.MainForm.
}
}
private void bbAdvancedFind_ItemClick(objec
{
ShowFindReplaceDialog(FindAndR
}
private void bbReplace_ItemClick(object sender, ItemClickEventArgs e)
{
ShowFindReplaceDialog(FindAndR
}
private void bbGoTo_ItemClick(object sender, ItemClickEventArgs e)
{
ShowFindReplaceDialog(FindAndR
}
private void searchTextEdit_
{
_searchResults.Clear();
ClearSearchResults();
if (string.Empty != searchTextEdit.Text)
{
searchButton.ImageIndex = CancelImageIndex;
searchButton.ToolTip = _searchButtonToolTipText;
_textToFind = searchTextEdit.Text;
Search(-1);
}
}
void searchResult_Click(object sender, EventArgs e)
{
if (_wordControl != null)
{
if (sender is SearchResultControl)
{
_wordControl.FindNextEntry(_
_currentResultIndex = _searchResults.IndexOf(sender as SearchResultControl);
}
}
}
private void navigationTabControl_
{
if (navigationTabControl.
{
if (navigationTabControl.
{
navigationTabControl.
}
}
}
private void prevSearchResultButton_Click(o
{
if (_searchResults.Count != 0)
{
DeselectSearchResults();
if (--_currentResultIndex < 0)
{
_currentResultIndex = _searchResults.Count - 1;
}
_wordControl.FindNextEntry(_
_searchResults[_
}
}
private void nextSearchResultButton_Click(o
{
if (_searchResults.Count != 0)
{
DeselectSearchResults();
if (++_currentResultIndex > _searchResults.Count - 1)
{
_currentResultIndex = 0;
}
_wordControl.FindNextEntry(_
_searchResults[_
}
}
private void NavigationPanel_Enter(object sender, EventArgs e)
{
ActiveControl = searchTextEdit;
}
private void NavigationPanel_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Return:
if (sender is TextEdit)
{
ActiveControl = nextSearchResultButton;
}
break;
case Keys.Escape:
CloseNavigationPane();
break;
}
}
#endregion
#region Public methods
public void ClearContent()
{
ClearSearchResults();
searchTextEdit.Text = string.Empty;
}
#endregion
#region Methods
private void ClearSearchResults()
{
resultTableLayout.Controls.
resultTableLayout.RowStyles.
resultTableLayout.RowStyles.
resultTableLayout.RowCount = 1;
resultTableLayout.Size = new Size(resultTableLayout.Width, 0);
matchesLabel.Text = string.Empty;
EnableNavigationButtons(false)
}
private void ShowFindReplaceDialog(FindAndR
{
_searchDialog = new FindAndReplaceDialog(App, activeTab)
{
TextToFind = searchTextEdit.Text
};
DesktopEngine.
_searchDialog.ActivateForm();
}
private void StartSearch()
{
if (searchButton.ImageIndex == CancelImageIndex)
{
searchButton.ImageIndex = SearchImageIndex;
ClearSearchResults();
_searchResults.Clear();
searchTextEdit.Text = string.Empty;
searchButton.ToolTip = _cancelButtonToolTipText;
ShowNoResultsText(true);
}
else
{
searchButton.ToolTip = _searchButtonToolTipText;
if (string.IsNullOrEmpty(
{
searchPopupMenu.ShowPopup(
}
}
}
private void Search(int startPosition)
{
_searchResults.Clear();
do
{
startPosition = _wordControl.
if (startPosition > -1)
{
AddToSearchResults(
startPosition += _textToFind.Length;
}
}
while (startPosition != -1);
ShowSearchResults();
}
private void ShowSearchResults()
{
ClearSearchResults();
foreach (var searchResultControl in _searchResults)
{
resultTableLayout.RowStyles.
resultTableLayout.Size = new Size(180, resultTableLayout.Size.Height + searchResultControl.Height);
resultTableLayout.RowCount += 1;
resultTableLayout.Controls.
}
if (_searchResults.Count > 0)
{
resultTableLayout.
resultTableLayout.
matchesLabel.Text = string.Format("{0} {1} ", _searchResults.Count, _matchesText);
EnableNavigationButtons(true);
}
else
{
ShowNoResultsText(false);
EnableNavigationButtons(false)
matchesLabel.Text = _noMatchesText;
}
}
private void AddToSearchResults(int position)
{
SearchResultControl searchResult = new SearchResultControl(_
searchResult.Dock = DockStyle.Fill;
searchResult.Click += new EventHandler(searchResult_
searchResult.KeyDown += new KeyEventHandler(
_searchResults.Add(
var command = new FindNextEntry(PathWay.Form, _textToFind, position, false);
_app.CommandExecuter.Execute(
}
private void DeselectSearchResults()
{
foreach (SearchResultControl searchResultControl in _searchResults)
{
searchResultControl.
}
}
private void ShowNoResultsText(bool cancelled)
{
resultTableLayout.
resultTableLayout.
SearchResultControl noResult = new SearchResultControl
noResult.ResultText = cancelled ? _cancelledSearchText : _noResultsText;
resultTableLayout.RowStyles.
resultTableLayout.Size = new Size(180, resultTableLayout.Size.Height + noResult.Height);
resultTableLayout.RowCount += 1;
resultTableLayout.Controls.
}
private void EnableNavigationButtons(bool enable)
{
if (enable)
{
prevSearchResultButton.
nextSearchResultButton.
nextSearchResultButton.Enabled = prevSearchResultButton.Enabled = true;
}
else
{
prevSearchResultButton.
nextSearchResultButton.
nextSearchResultButton.Enabled = prevSearchResultButton.Enabled = false;
}
}
#endregion
}
}
Информация о работе Отчет по производственной практике в Компании “Эпам системз”